如何用Rasterio保存带波段名的GeoTIFF并在ArcGIS中显示
解决Rasterio保存GeoTIFF后ArcGIS不显示自定义波段名称的问题
问题背景
已有可正常运行的Rasterio函数用于保存栅格堆栈为GeoTIFF,但生成的文件在ArcGIS中无法显示自定义波段名称。尝试过三种设置波段名称的方法(传入descriptions参数、设置dst.descriptions属性、循环调用set_band_description方法)均运行成功,但ArcGIS中始终看不到自定义名称。
原基础保存函数:
def saveRasterToDisc(out_image, raster_crs, out_transform, output_raster_path): # save raster to disk with rasterio.open(output_raster_path, 'w', driver='GTiff', height=out_image.shape[1], width=out_image.shape[2], count=out_image.shape[0], dtype=out_image.dtype, crs=raster_crs, transform=out_transform, nodata=0, ) as dst: dst.write(out_image)
原因分析
ArcGIS读取GeoTIFF波段名称时,优先识别TIFF原生的IMAGEDESCRIPTION标签;而Rasterio默认设置的波段描述仅写入GDAL层面的元数据,未同步到ArcGIS依赖的TIFF原生标签中,导致ArcGIS无法读取到自定义名称。
解决方法
在设置波段描述的同时,为每个波段添加IMAGEDESCRIPTION标签,确保ArcGIS能识别。修改后的函数如下:
def saveRasterToDisc(out_image, raster_crs, out_transform, bands, output_raster_path): with rasterio.open(output_raster_path, 'w', driver='GTiff', height=out_image.shape[1], width=out_image.shape[2], count=out_image.shape[0], dtype=out_image.dtype, crs=raster_crs, transform=out_transform, nodata=0, ) as dst: dst.write(out_image) # 同时设置GDAL波段描述和ArcGIS识别的TIFF标签 for band_idx, band_name in enumerate(bands, start=1): # 设置Rasterio/GDAL层面的波段描述 dst.set_band_description(band_idx, band_name) # 设置ArcGIS识别的IMAGEDESCRIPTION标签 dst.update_tags(band_idx, IMAGEDESCRIPTION=band_name)
额外验证步骤
- 保存后,可使用Rasterio读取验证波段描述是否正确写入:
with rasterio.open(output_raster_path) as src: print(src.descriptions) for i in range(1, src.count+1): print(src.tags(i).get('IMAGEDESCRIPTION'))
- 若仍无法在ArcGIS中显示,可尝试:
- 确认ArcGIS版本支持读取TIFF的
IMAGEDESCRIPTION标签(较新版本均支持) - 将GeoTIFF添加到ArcGIS地理数据库后再查看(部分场景下数据库会更好识别元数据)
- 确认ArcGIS版本支持读取TIFF的
内容的提问来源于stack exchange,提问作者Zozzoy
相关产品推荐
相关产品推荐

