ArcEngine调用工具箱(Geoprocessor)工具输入的要素/栅格为多个情况时的处理方法(20190829)

1、需求

在用ArcEngine调用工具箱中的工具时,碰到了这样的情况,以工具箱中“Data Management Tools–>Features–>Feature ToPolygon”工具为例,需要选择多个输入的要素,如下图:
工具箱中Features To Polygon工具
查看这个工具的帮助文档,得知输入的要素是如下图这样的,他的In_feature可以是单个要素类,也可以是多个要素类。
Features To Polygon的输入参数
从帮助文档给的Python的代码示例中,他输入的参数是以逗号分隔的,但是我在用C#实现这个功能的过程中,不管是输入要素类地址的数组、要素类地址的List列表还是图层或要素类对象的数组或列表都提示我输入的参数无效,这个问题也困扰了很久。

2、解决方案

偶然间我尝试了用分号隔开,奇迹发生了,居然成功执行了,所以,我可以得出结论:
ArcEngine调用工具箱(Geoprocessor)工具输入的要素/栅格为多个情况时,应该用分号分隔他们的存放位置
至于如何调用工具箱,可以参考上一篇博客: ArcEngine使用Geoprocessor接口实现工具箱中的方法(以线要素平滑为例)

3、代码实现

这次的代码和上一篇博客的类似,就不附全部的代码了,附上关键代码:

/// <summary>
        /// 要素转换为面
        /// </summary>
        /// <param name="input">待转换面的要素</param>
        /// <param name="outPath">输出要素的路径</param>
        /// <param name="tolerence">容差</param>
        /// <returns>转换成功返回1,否则返回0</returns>
        private int FeatureToSurface(List<string> input,string outPath,double tolerence)
        {
            Geoprocessor pGeoprocessor = new Geoprocessor();
            pGeoprocessor.OverwriteOutput = true;

            string inFeature = "";
            foreach(string s in input)
            {
                inFeature = inFeature+s + ";";
            }
            inFeature = inFeature.Substring(0, inFeature.Length - 1);
            FeatureToPolygon featureToPolygon = new FeatureToPolygon(inFeature, outPath);
            if(tolerence!=-1)
                featureToPolygon.cluster_tolerance = tolerence;

            try
            {
                pGeoprocessor.Execute(featureToPolygon, null);
                return 1;
            }
            catch
            {
                object sev = null;
                MessageBox.Show(pGeoprocessor.GetMessages(ref sev), "错误");
                return 0;
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值