ArcGIS Pro SDK 3.0中的Geoprocessing类是用于执行地理处理工具的核心类。地理处理工具是用于执行空间分析、数据转换、数据管理等任务的工具集,包括常见的空间分析工具、栅格处理工具、矢量处理工具、地图制图工具等。
之前有简单记录了下Geoprocessing工具的用法:
【ArcGIS Pro二次开发】(9):GeoProcessing工具和自定义工具的调用
最近在使用过程中发现遗漏了不少东西,再次记录,方便查阅。
这次主要记录Geoprocessing的主要方法和参数的使用。
一、【MakeValueArray】方法
MakeValueArray方法用于创建一个GPValue数组,传递多个参数给地理处理工具。
var parameters = Geoprocessing.MakeValueArray(ly, null, @"100 Meters",null,null, "ALL");
参数的类型和数量根据你所要执行的GP工具而定。
二、【ExecuteToolAsync】方法
ExecuteToolAsync是一个异步方法,用于执行地理处理工具。
IGPResult result = await Geoprocessing.ExecuteToolAsync("Buffer_analysis", parameters, null, null, null, executeFlags);
ExecuteToolAsync方法的参数如下:
参数1:要执行的地理处理工具的名称,例如上面的“Buffer_analysis”指的是【缓冲区】工具。
参数2:即上面【MakeValueArray】方法创建的参数数组,参数名称和值的类型必须与地理处理工具的要求相匹配。
参数3:environments。用于设置地理处理工具的环境变量。一般不需要设置环境变量,默认设置为null。
如果需要设置的话,可以通过【MakeEnvironmentArray】来创建:
var environments = Geoprocessing.MakeEnvironmentArray(overwriteoutput: true , extent: "460532 3773964 525111 3827494");
如上所示,设置了2个参数:【overwriteoutput】输出是否覆盖、【extent】范围。
参数4: cancelToken。用于取消地理处理工具的执行。如果不需要取消功能,一般就默认设置为null。
参数5:callback。一个GPToolExecuteEventHandler接口,说实话我也不知道有啥用,默认设置为null。
参数6:executeFlags。用于设置工具的执行参数,下面会重点讲。
以上6个参数,一般情况下注意设置1,2,6这3个参数,另3个基本都是设为null。
三、【GPExecuteToolFlags】参数
GPExecuteToolFlags是工具的一组参数设置,用于指定地理处理工具应怎么执行。
GPExecuteToolFlags executeFlags = GPExecuteToolFlags.RefreshProjectItems | GPExecuteToolFlags.GPThread | GPExecuteToolFlags.AddToHistory | GPExecuteToolFlags.AddOutputsToMap | GPExecuteToolFlags.InheritGPOptions;
上面列出了GPExecuteToolFlags的5个主要参数设置:
1、【RefreshProjectItems】
用于在地理处理工具执行后刷新地图项目,如果工具执行后对要素存在修改,建议设置刷新。
2、【GPThread】
用于指定在执行地理处理工具时是否使用新线程。使用新线程可以避免主线程阻塞并提高程序响应速度,但也可能导致内存使用过高和线程冲突等问题。建议正常情况下还是先不用。
3、【AddToHistory】
指定执行结果将添加到历史记录中。这对于用户需要追踪之前的地理处理操作非常有用。建议打开。
4、【AddOutputsToMap】
工具执行结果添加到当前地图中。这点可根据需要选择,最终结果数据可以添加显示,但是如果是中间数据,则可以不显示。我在之前做的一个拓扑工具就因为没有设置,致使中间数据添加到当前地图中,显得很乱。
5、【InheritGPOptions】
用于指定是否继承执行地理处理工具的GP选项。例如,如果当前GP环境设置了输出坐标系、Z值和M值,那么在执行地理处理工具时,这些设置将被继承并应用于工具的输出。一般情况下,我是不会去设置GP环境,所以这个Flag也不会去用。
四、【ShowMessageBox】方法
这里的Geoprocessing.ShowMessageBox,和一般的MessageBox不同,是专门针对GP工具的消息框,感觉更好用一些。
Geoprocessing.ShowMessageBox(toolResult.Messages, "GP Messages", toolResult.IsFailed ? GPMessageBoxStyle.Error : GPMessageBoxStyle.Default);
窗口界面如下:
五、【OpenToolDialogAsync】方法
Geoprocessing.OpenToolDialogAsync方法用于打开地理处理工具的参数对话框,以便用户可以手动输入参数值。该方法通常用于需要用户自定义参数值的情况,例如需要使用用户指定的文件路径、日期等。这个方法主要是实现用户交互,如果需要用户手动输入参数值,用这个比较合适。不过感觉到目前为止,都还想不到什么地方会用到它。
以上就是本次补遗的内容。现在回头看之前的文章,还是挺乱的,有很多疏漏。
现在是初学的积累阶段,等以后再好好整理吧。