我使用LibTiff.NET库在C# (内部统一)中加载GeoTiff数据。**注-我也看了GDAL,但遇到了如下所述的类似问题,如果可能的话,我更愿意使用LibTiff。
我最终希望能够获得一个lat/long值,并具有一个函数,该函数将返回大约50m区域的像素数据,这些数据来自磁盘上的GeoTiff图像(不将整个图像存储在内存中)。
我有一个测试文件,代表我的软件将在生产中提供。
我试图弄清楚如何读取或计算测试文件映像的lat/long区段,因为我无法找到包含此功能的好教程或示例。
我可以在width+height中读取文件的TiffTags,但似乎对计算范围(如X和Y分辨率)至关重要的许多其他值并不存在。它还显示标签中不存在lat/long区段(或边框)。
此时,我不得不相信可能有更多我不熟悉的标记或头数据,因为当我将测试文件加载到Caris EasyView中时,我可以看到一些属性,我想从该文件中读取或计算:

是否可以使用LibTiff获取这些数据?还是我应该使用更好的系统?(可能是包装GDAL?)
**注意:由于NDA,我无法链接测试文件,而且它是巨大的
发布于 2022-01-26 14:53:23
这是一个32位的地质学:
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;https://stackoverflow.com/questions/69698008
复制相似问题