1、需求
在用ArcEngine调用工具箱中的工具时,碰到了这样的情况,以工具箱中“Data Management Tools–>Features–>Feature ToPolygon”工具为例,需要选择多个输入的要素,如下图:
查看这个工具的帮助文档,得知输入的要素是如下图这样的,他的In_feature可以是单个要素类,也可以是多个要素类。
从帮助文档给的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;
}
}