LibTiff C# - 获取坐标

3
我正在使用LibTiff.NET库在C#(Unity内部)中加载GeoTiff数据。 **注意 - 我也看过GDAL,但遇到了下面概述的类似问题,如果可能的话,我更愿意使用LibTiff。

我最终想要能够获取经纬度值并返回一个函数,该函数从磁盘上的GeoTiff图像流中返回50米范围内的一块像素数据(不将整个图像存储在RAM中)。

我有一个测试文件,代表了我的软件在生产中将会得到的内容。

我试图弄清楚如何读取或计算测试文件图像的纬度/经度范围,因为我找不到一个包含此功能的好教程或样本。

我可以读取TiffTags中的文件宽度+高度,但许多其他似乎关键的用于计算范围的值,例如X和Y分辨率不存在。 看起来,纬度/经度范围(或边界框)也没有出现在标签中。

在这一点上,我认为可能还有更多的标签或标头数据我不熟悉,因为当我将测试文件加载到Caris EasyView中时,我可以看到许多属性,我希望能够从文件中读取或计算:

enter image description here 使用LibTiff是否可以获取这些数据? 或者有没有更好的系统?(封装GDAL也许?)

**注意:由于NDA,我无法链接测试文件,而且它很大。
1个回答

1
这是一个32位的geotiff文件。
int width = tiff.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
int height = tiff.GetField(TiffTag.IMAGELENGTH)[0].ToInt();

int samplesPerPixel = tiff.GetField(TiffTag.SAMPLESPERPIXEL)[0].ToInt();
int bitsPerSample = tiff.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt();
int bytesPerSample = bitsPerSample / 8;

byte[] scanline = new byte[tiff.ScanlineSize()];
float[] scanline32Bit = new float[tiff.ScanlineSize() / 4];//divide by 4 for byte word 

FieldValue[] modelTiePointTag = tiff.GetField(TiffTag.GEOTIFF_MODELTIEPOINTTAG);
byte[] modelTransformation = modelTiePointTag[1].GetBytes();
double originLon = BitConverter.ToDouble(modelTransformation, 24);
double originLat = BitConverter.ToDouble(modelTransformation, 32);

FieldValue[] modelPixelScaleTag = tiff.GetField(TiffTag.GEOTIFF_MODELPIXELSCALETAG);
byte[] modelPixelScale = modelPixelScaleTag[1].GetBytes();
double pixPerLong = BitConverter.ToDouble(modelPixelScale, 0);
double pixPerLat = BitConverter.ToDouble(modelPixelScale, 8) * -1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接