在C#中不使用GDAL,如何通过BitMiracle读取GeoTiff的NODATA值?
问题:不依赖GDAL,使用BitMiracle.LibTiff读写GeoTIFF的No Data值
我正在C#中编写一个不依赖GDAL的GeoTiff读写器,这是硬性要求。目前我已能通过以下代码读取列数等信息:
using BitMiracle.LibTiff.Classic; // ... 省略代码 ... using (Tiff image = Tiff.Open(fileToOpen, "r")) { if (image == null) throw new Exception("Could not open file."); returnRaster = new Raster(); FieldValue[] value = image.GetField(TiffTag.IMAGEWIDTH); int width = value[0].ToInt(); returnRaster.numColumns = width; }
但当我尝试通过类似如下代码获取NODATA值时:
value = image.GetField(TiffTag.NODATA); int nodata = value[0].ToInt(); returnRaster.No_Data = nodata;
发现不存在TiffTag.NODATA或等效项。请问如何在不使用GDAL、仅使用BitMiracle API的情况下读取(及写入)GeoTiff的No Data值?
解决方案
GeoTIFF的No Data值通常存储在GDALNoData这个自定义TIFF标签中(标签编号为42113),BitMiracle.LibTiff默认没有预定义该标签,需要手动注册后再进行读写操作。
1. 读取No Data值
先注册自定义标签,再通过GetField获取对应值:
// 注册GDALNoData自定义标签(标签ID 42113) Tiff.RegisterField(42113, "GDALNoData", TiffType.DOUBLE, 1, TiffFieldFlags.CUSTOM | TiffFieldFlags.WRITE); using (Tiff image = Tiff.Open(fileToOpen, "r")) { if (image == null) throw new Exception("Could not open file."); returnRaster = new Raster(); // 读取宽度(保留原有逻辑) FieldValue[] widthVal = image.GetField(TiffTag.IMAGEWIDTH); returnRaster.numColumns = widthVal[0].ToInt(); // 读取No Data值 if (image.GetField(42113, out FieldValue[] nodataVal)) { // 根据栅格数据类型转换,此处以int类型示例 int noData = Convert.ToInt32(nodataVal[0].ToDouble()); returnRaster.No_Data = noData; } }
2. 写入No Data值
写入前同样需要先注册标签,再通过SetField设置值:
// 注册自定义标签 Tiff.RegisterField(42113, "GDALNoData", TiffType.DOUBLE, 1, TiffFieldFlags.CUSTOM | TiffFieldFlags.WRITE); using (Tiff image = Tiff.Open(fileToSave, "w")) { if (image == null) throw new Exception("Could not open file for writing."); // 设置必要的TIFF基础字段(如宽度、高度等,保留原有逻辑) image.SetField(TiffTag.IMAGEWIDTH, returnRaster.numColumns); // ... 其他必填字段设置 ... // 写入No Data值 image.SetField(42113, returnRaster.No_Data); }
额外说明
- 部分工具生成的GeoTIFF可能用NoDataValue标签(编号33550)存储无数据值,可根据需求同时处理这两个标签。
- 注意数据类型匹配:若栅格为浮点型,No Data值需以
double类型读写;若为整数型,读取时需做对应类型转换。
内容的提问来源于stack exchange,提问作者philologon
相关产品推荐
相关产品推荐

