使用GP裁剪工具裁剪栅格不能“按照矢量图范围”裁剪的一个问题

调用GP工具裁剪栅格数据的代码:

ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor();
            gp.OverwriteOutput = true;
            
            ESRI.ArcGIS.DataManagementTools.Clip cp;

            try
            {
                cp = new ESRI.ArcGIS.DataManagementTools.Clip();
                cp.in_raster = @"C:\Users\Administrator\Desktop\creatRaster\test4.tif";
                cp.rectangle = "#";
                cp.clipping_geometry = "ClippingGeometry";
                cp.out_raster = "C:\\Users\\Administrator\\Desktop\\creatRaster\\test7.tif";
                cp.in_template_dataset = @"C:\Users\Administrator\Desktop\creatRaster\shape\Tibet_Project.shp";
                gp.Execute(cp, null);

            }
            catch (Exception ex)
            {
                
            }

刚用上面的代码进行栅格数据的裁剪,各参数都对,也裁剪出来了结果,但是结果并不是矢量图的形状。看了一下,我将clipping_geometry属性设置为了TRUE,应该按照矢量图的范围进行裁剪。
在ArcGIS里面重新裁剪了一下,结果也是对的,一时半会儿没搞懂,最后看了一下发现了问题是NoDataValue的原因:

输入的栅格信息如下图所示:
在这里插入图片描述
输入的栅格的NoData值是空的,也就是这个栅格没有设置NoData值,在用GP工具时,如果没有设置NoDataValue(input,optional)这一属性,则输出图层用输入图层的NoData值,即也为空。栅格数据必定是n行*m列的矩形,在ArcGIS中看到的行政区划形状的栅格数据周围的空白处也是有值存在的,只是这个值被设置成了NoDataValue,所以看到行政区划的形状。当NoData没有设置值时,就无法确定周围的值以及显示的时候该以那个值为空白。
之后加上下面代码:
cp.nodata_value = “256”;
再进行裁剪,输出栅格将行政区外(矩形范围内)的栅格值都设置成256,显示的时候判断值256为NoData,显示为空白。
至于cp.nodata_value 值设置成多少要看一下原栅格数据的值的范围,不在范围内的合法值都行。

猜你喜欢

转载自blog.csdn.net/qq_40821274/article/details/84396499