GP工具欧式距离的一个小Bug

通常,我们使用GeoProcessorResultClass创建对象来获取GP工具的执行结果,如下所示:

            IGeoProcessorResult result = new GeoProcessorResultClass();  //执行结果

            ESRI.ArcGIS.SpatialAnalystTools.Reclassify reclassify = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify();
            reclassify.in_raster = inRaster;
            reclassify.reclass_field = field;
            reclassify.remap = remap;
            reclassify.out_raster = outpath;

            object sev = null;

            try
            {
                result = (IGeoProcessorResult)GP.Execute(reclassify, null);
                MessageBox.Show(GP.GetMessages(ref sev));

                //将结果加载到显示
                IRasterDataset pRasterDataset = GP.Open(result.ReturnValue) as IRasterDataset;
                IRasterLayer resRasterLyr = new RasterLayerClass();
                resRasterLyr.CreateFromDataset(pRasterDataset);

                axMapControl1.AddLayer(resRasterLyr);
                axMapControl1.ActiveView.Refresh();
            }
            catch
            {
                MessageBox.Show(GP.GetMessages(ref sev));
            }

通过 result = (IGeoProcessorResult)GP.Execute(reclassify, null);将result赋值,result即为栅格数据的执行结果,而当数据位栅格数据时,result.ReturnValue即为栅格数据的保存路径,而通过GP.Open(result.ReturnValue) as IRasterDataset;可以打开栅格数据集。或者也可以直接从栅格数据路径创建图层。

出错位置

但是,当调用欧式距离工具时,以上GP.Open(result.ReturnValue) as IRasterDataset;一句报错,改为                resRasterLyr.CreateFromFilePath(path);也不对。经过调试发现,欧氏距离返回的(result.ReturnValue)路径最后多了一个分号。

解决方法

通过

path = path.Split(';')[0];

即可去除以上错误。

为防止以上Bug再出现,可以在每次执行完GP工具都加上这句。对于有Bug的工具,这句代码可以去除,若没有Bug,则没有影响。

出现原因

ArcToolBox中许多工具是有多个输出文件的,如欧式距离可输出欧式距离栅格和方向栅格。在输出多个文件时,result.ReturnValue返回的值为多个路径中间用 ; 分割。

在欧式距离中,由于是多输出,即使只有一个文件输出,后面也多了一个分号。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值