ArcGIS Pro自带了1000种以上的GeoProcessing工具,几乎可以实现所有你想要做的事。
ArcGIS Pro的二次开发并不需要我们从底层做起,很多功能只要学会调用工具并组合使用,就完全可以实现。
下面介绍如何调用系统自带的GeoProcessing工具,以及自己做的自定义工具箱。
一、调用GepProcessing工具
以【缓冲区】工具为例,直接上代码:
protected override async void OnClick()
{
// 获取当前地图
var map = MapView.Active.Map;
// 获取图层
var ly = map.GetLayersAsFlattenedList()[0];
// 生成缓冲区工具所需的参数
var par = Geoprocessing.MakeValueArray(ly, null, @"100 Meters",null,null, "ALL");
// 开启异步
await QueuedTask.Run(() =>
{
// 执行缓冲工具
Geoprocessing.ExecuteToolAsync("analysis.Buffer", par);
});
}
主要用到2个方法:
1、【Geoprocessing.MakeValueArray()】方法用于生成工具所需的参数。
每个Geoprocessing工具都必须有参数,否则不能执行。
上面以【缓冲区】为例,在ArcGIS Pro中,我们可以看到工具参数如下:
MakeValueArray()中的参数要按照顺序一一填写,遇到参数是空值或采用默认值时,以null代替即可。(请无视上面的参数7,8)。
2、【Geoprocessing.ExecuteToolAsync()】方法用于执行工具。
该方法有2个参数。
参数1为工具名,这个和Arcpy工具是一致的,比说如【缓冲区】工具在Arcpy中的名称为【arcpy.analysis.Buffer】,在Geoprocessing里的名称则为【analysis.Buffer】。
可以看一下我之前的文章,里面有介绍方便的查找方法:
Python小技巧【4】——在脚本中调用系统工具或者自定义工具的小技巧https://blog.csdn.net/xcc34452366/article/details/128734176?spm=1001.2014.3001.5501参数2即为上面MakeValueArray()方法生成的参数。
执行结果如下:
二、调用自定义工具箱
以自定义的工具【ZH-消除重复要素】为例(已放入文章末尾的工程文件里,可自行下载):
protected override async void OnClick()
{
// 获取当前地图
var map = MapView.Active.Map;
// 获取图层
var ly = map.GetLayersAsFlattenedList()[0];
// 生成缓冲区工具所需的参数
var par = Geoprocessing.MakeValueArray(ly, "result_fc");
// 开启异步
await QueuedTask.Run(() =>
{
// 执行缓冲工具
var ToolPath = @"E:\0-资料\GIS相关\ArcGIS Pro二次开发工具\GeoprocessingTool\消除重复要素\cc工具箱.tbx\Repeat";
Geoprocessing.ExecuteToolAsync(ToolPath, par);
});
}
}
和Geoprocessing工具不同的是,在ExecuteToolAsync()方法的第一个参数需要输入完整的工具路径。需要注意的是最后的【Repeat】是工具名,不是在目录里看到的标注名【ZH-消除重复要素】,可右键单击工具属性查看。
其它的就没有什么区别了。
三、工程文件分享
最后,放上工程文件的链接:
GeoprocessingToolhttps://pan.baidu.com/s/14Do5RaVGvgxwv7KtNfaqug?pwd=i8fh