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

AE影像处理时ISAVEAS不能实时写入文件

posted @ 2021-11-15 17:31  我也是个傻瓜  阅读(197)  评论(0编辑  收藏  举报