首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibTiff C# -获取坐标

LibTiff C# -获取坐标
EN

Stack Overflow用户
提问于 2021-10-24 15:03:28
回答 1查看 493关注 0票数 2

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

我最终希望能够获得一个lat/long值,并具有一个函数,该函数将返回大约50m区域的像素数据,这些数据来自磁盘上的GeoTiff图像(不将整个图像存储在内存中)。

我有一个测试文件,代表我的软件将在生产中提供。

我试图弄清楚如何读取或计算测试文件映像的lat/long区段,因为我无法找到包含此功能的好教程或示例。

我可以在width+height中读取文件的TiffTags,但似乎对计算范围(如X和Y分辨率)至关重要的许多其他值并不存在。它还显示标签中不存在lat/long区段(或边框)。

此时,我不得不相信可能有更多我不熟悉的标记或头数据,因为当我将测试文件加载到Caris EasyView中时,我可以看到一些属性,我想从该文件中读取或计算:

是否可以使用LibTiff获取这些数据?还是我应该使用更好的系统?(可能是包装GDAL?)

**注意:由于NDA,我无法链接测试文件,而且它是巨大的

EN

回答 1

Stack Overflow用户

发布于 2022-01-26 14:53:23

这是一个32位的地质学:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69698008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档