ISaveAs导出栅格显示异常
使用ISaveAs接口保存栅格可能出现比较奇怪的问题,主要原因是底层调用的GDAL,它对中文支持不好!
问题描述
(1)执行不报错误,但结果tif文件大小很小(只有几kb);
(2)结果tif栅格取值范围为3.40282346639e+038到3.40282346639e+038,显示为空白,行列号、分辨率等栅格属性信息正常;
(3)同样的代码,保存为GRID的栅格大小和显示正常;
(4)在不同的环境中,出现问题的情况不同(一般高版本不容易出问题)。
可能原因
(1)保存的TIF路径过长,改为较短的路径;
(2)保存的TIF名称不对,不应有中文路径,最好字母或下划线开头;
(3)版本问题,高版本AE一般不出现这个问题;
(4)栅格数据被占用导致,需要使用FinalReleaseComObject(dataset)释放;
(5)AE调用GDAL未强制回写,需要在后面加GC.Collect()(不能写在静态方法中);
解决方案
最安全稳妥的解决方式是放弃它,使用IRasterLayerExport接口导出,示例代码如下:
IRasterLayerExport3 rasterLyrExport = new RasterLayerExportClass(); IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromRaster(raster); rasterLyrExport.RasterLayer = rasterLayer; rasterLyrExport.Force2RGB = false; IRasterDataset rasterDataset = rasterLyrExport.Export(workspace, System.IO.Path.GetFileName(filePath), format); Marshal.ReleaseComObject(rasterDataset);
参考资料
调用ISaveAs2 saveas方法将栅格保存为TIFF格式出现问题 -
关于栅格数据保存成tif文件,无法在ArcMap中显示的问题。
ISaveAs将IDW插值后的栅格另存为tiff后,图片浏览器无法立即打开该.tif
https://blog.csdn.net/yh0503/article/details/51447278