ArcGIS Pro SDK 003 如何调用Toolbox
1、如何调用普通的Tool
ArcGIS中的Toolbox非常强大,做二次开发的时候,必不可少的会调用,在ArcObjects SDK中,每个Tool都会有自定义的类对应,例如栅格转矢量数据,定义在ESRI.ArcGIS.ConversionTools.dll程序集中,对用的类为RasterToPolygon。而在ArcGIS Pro SDK中就没这样的类定义了,就需要传入字符串格式的工具名称,指定执行哪个工具。参数也无法使用对象.属性的方式设置,而是以数组的方式设置。
我们在ArcObjects SDK中,调用栅格转矢量工具的代码如下。
var myRasterToPolygon = new RasterToPolygon
{
in_raster = myWatershed.out_raster,
out_polygon_features = FilePathHelper.GetTempShapeFilePath("RasterToPolygon_")
};
myGPEx.Execute(myRasterToPolygon);
在ArcGIS Pro SDK中,调用该工具的方法如下所示。
myParameters = Geoprocessing.MakeValueArray(myWatershedOutFile, myWatershedPolygonOutFile, "Value");
myGPResult = await Geoprocessing.ExecuteToolAsync("conversion.RasterToPolygon", myParameters);
Geoprocessing.MakeValueArray用来设置参数,Geoprocessing.ExecuteToolAsync函数用来执行工具。该函数的第一个参数就是工具的名称,第二个参数是执行工具设置的参数信息,还有第三个参数是对环境的设置,如果不需要对环境进行特殊设置,忽略该参数即可。
因为没有类定义,并不好确认要传入的工具名称、到底要设置哪些参数、参数的顺序以及是否要进行环境设置等信息。此时我们就要借助ArcGIS Pro桌面软件、帮助甚至ArcObjects SDK中对应工具的定义。
还是以RasterToPolygon为例,我们可以先在ArcGIS Pro桌面软件上找到该工具,并打开,如下图所示。

点击右上角?号,可以进入该工具的帮助页面,如下图所示。

其中红框中的内容就是工具的名称,我们通过ArcGIS Pro sdk调用的时候,传入该名即可。参数以及设置的顺序可以通过函数参数获取。其中{}内的参数为可选参数。在下面表格中,还有一些参数说明,写的也比较清晰。这样我们就能明白如何设置参数了。
2、不能设置输出文件参数的特殊情况
有些工具是有特殊情况的,例如栅格掩膜工具ExtractByMask。在ArcGIS Pro桌面软件下,其界面如下图所示。

参数包括输入栅格、掩膜数据以及输出栅格等。点击帮助,切换到Python下,看到的代码如下所示。
ExtractByMask(in_raster, in_mask_data, {extraction_area}, {analysis_extent})
这个就比较特殊了,感觉也有可能是帮助没有写好,缺参数,输出栅格数据在哪设置?并且工具名称前也没有加模块的名称,这样我们就不知道怎么调用了。
再接着看下面的python例子代码,如下所示。
import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outExtractByMask = ExtractByMask("elevation", "mask.shp", "INSIDE")
outExtractByMask.save("C:/sapyexamples/output/maskextract")
这样就清楚一些了,ExtractByMask工具输入sa模块,我们调用的时候,工具名称写sa.ExtractByMask。执行的时候,并没有设置输出文件存储的目录,而是返回输出结果,调用输出结果的save函数保存处理的结果数据。这不太符合我们的使用习惯,获取在ArcGIS Pro SDK中,也这样设置参数,最后用GPResult可以把输出结果保存起来。
但我没有做这样的测试,是否可行也不清楚。
我感觉还是可以在参数里面设置输出结果文件路径的,于是我去ArcObjects SDK中去查找ExtractByMask类的定义,如下图所示。

ArcObjects SDK中的ExtractByMask只有三个参数,看来ArcGIS Pro对该工具进行了扩展,增加了一些参数。既然第三个参数是输出的栅格数据,那么我们也在ArcGIS Pro SDK中的ExtractByMask第三个参数设置输出栅格数据试试。代码如下。
string myExtractByMaskOutFile = this._TempFolder.GetTempFilePath(".tif", "ExtractByMask_");
myParameters = Geoprocessing.MakeValueArray(this.DEMFilePath, this.ClipFile, myExtractByMaskOutFile);
myGPResult = await Geoprocessing.ExecuteToolAsync("sa.ExtractByMask", myParameters);
执行了一下,可以正确执行,输出结果也出来了。这就感觉比较奇怪,看帮助的话,第三个参数应该是可选参数extraction_area,感觉帮助和实际功能有些不一致,不过出来就可以了,没再深究问题出在哪里。
如果实在出不来的话,估计我就要想办法看怎么通过GPResult把结果存储成文件,或者直接写pothon代码去执行了。
3、输出数据只能设置名称的情况
这种情况是我在调用MakeXYEventLayer时候遇到的,其在ArcGIS Pro中的界面如下图所示。

这个地方是设置图层名称,而不是存储的数据路径。但实际上,我是想把XY数据,导出成Shape文件保存下来的。如果在ArcGIS pro中操作,默认会把结果作为图层添加到地图上,我们再把该图层导出成Shape文件就可以了。
如果在SDK中,该如何处理呢?
该工具python相关的帮助中的python代码如下。
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.MakeXYEventLayer_management("firestations.dbf", "POINT_X", "POINT_Y","firestations_points", "", "POINT_Z")
我在测试的时候,后面是跟了一个CopyFeatures工具,就是把MakeXYEventLayer输出的图层,保存到指定目录下,并且为.shp格式。没注意到底是否生成成功。
后面检查的时候,发现我在MakeXYEventLayer工具中指定输出的文件并没有生成成功,但CopyFeatures的输出确是存在的。后来发现只要把设置一个随机的图层名称,在CopyFeatures调用的时候,输入这个随机名称,就可以运行成功,代码如下所示。
string myOutLyrName = "XY_" + Guid.NewGuid().ToString();
myParameters = Geoprocessing.MakeValueArray(myOutTableFile, "NEAR_X", "NEAR_Y", myOutLyrName);
myGPResult = await Geoprocessing.ExecuteToolAsync("management.MakeXYEventLayer", myParameters);
if (myGPResult.IsFailed)
{
throw new ArgumentException("生成图层," + myGPResult.ErrorMessages.First().Text);
}
//拷贝要素
pProcessInfo.SetProcess(98, "正在拷贝结果数据...");
myParameters = Geoprocessing.MakeValueArray(myOutLyrName, this.OutputPointFile);
myGPResult = await Geoprocessing.ExecuteToolAsync("management.CopyFeatures", myParameters);
if (myGPResult.IsFailed)
{
throw new ArgumentException("拷贝结果," + myGPResult.ErrorMessages.First().Text);
}
对这个问题,我没太往下深入研究,感觉应该是系统把数据生成到了一个默认工作空间下,CopyFeatures的输出指定了这个名称,从默认工作空间下去找这个数据,但我再默认的gdb下并没有找到。
也可能是,该结果图层数据以内存的形式存在了ArcGIS pro当前缺省的地图数据源中,CopyFeatures的输入指定了这个名称,会从该数据源中取数据。
具体什么原因,目前还不是太清楚,但确实这么处理是成功的。
ArcGIS Pro SDK 003 如何调用Toolbox的更多相关文章
- ArcGIS Pro Add-In插件开发[ArcGIS Pro SDK for .NET]
本文基于 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5 开发和撰写. 目录 开发环境配置 获取ArcGIS Pro 安装VS2019 ...
- ArcGIS Pro 二次开发
本文基于 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5.22081 开发和撰写. 目录 开发环境配置 获取ArcGIS Pro 安装V ...
- ArcGIS Pro 简明教程(4)工具和模型构建器
ArcGIS Pro 简明教程(4)工具和模型构建器 by 李远祥 工具箱中的工具 ArcGIS Pro 在1.3版本基本上已经继承了ArcMap的所有工具,而且会不断加入一些它自身才有的工具,例如适 ...
- ArcGIS Pro 简明教程(3)数据编辑
ArcGIS Pro 简明教程(3)数据编辑 by 李远祥 数据编辑是GIS中最常用的功能之一,ArcGIS Pro在GIS数据编辑上使用习惯有一定的改变,因此,本章可以重点看看一些编辑工具的使用和使 ...
- ArcGIS Pro 简明教程(2)基础操作和简单制图
ArcGIS Pro 简明教程(2)基础操作和简单制图 By 李远祥 本章主要介绍ArcGIS Pro如何加载数据并进行简单的地图制作,以基本的操作为主. 上一章节介绍过,ArcGIS Pro是可以直 ...
- ArcGIS Pro 简明教程(1)Pro简介
ArcGIS Pro 简明教程(1)Pro简介 ArcGIS Pro已经发布了相当的一段时间了,截至笔者写这系列文章的时候已经是1.3版本了,已经是相当完善的一个版本,基本上已经完成了原来ArcGIS ...
- ArcGIS Runtime SDK是什么?
如上图,Runtime SDK是什么东西?居然还有安卓.苹果手机.Mac.QT的版本? 是不是意味着ArcGIS的编辑数据和空间分析可以通过编程的方法在每个平台上满地跑了? 答案是:是,也不是. 1. ...
- ArcGIS Pro开发Web3D应用(3)——Server/Portal授权服务开发
1.整体环境搭建完成 WebAdaptor.DataStore.Portal for arcgis.arcgis server.arcgis pro都成功部署安装,不管是同服务器还是不同服务器,最好做 ...
- ArcGIS Pro体验04——菜单栏
对菜单栏进行熟悉一下: 1.地图菜单 剪切板(Clipboard):剪切(Cut).复制(Copy).粘贴(Paste),这些不用说了,在ArcMap中是放在"编辑"菜单下面的.当 ...
- ArcGIS Runtime SDK for Android 授权(arcgis android 去除水印)
ArcGIS Runtime SDK for Android 授权 ESRI中国北京 要下载和安装 ArcGIS Runtime SDK for Android,您需要注册开发者账户,进而便拥有了访问 ...
随机推荐
- 【devexpress】spinEdit控件如何设置只能输入两位小数
只需设置对应的正则表达式即可,我这里设置的是n2意思就是两位小数的意思 效果如下
- ValueError: Detected newline in header value. This is a potential security problem
原因 flask框架进行重定向的url中包含 换行符\n或\r 解决方法 使用 strip() 函数去除行首或行尾的换行符(如果你url中间包含这些符号replace函数替换, 但是如果中间包含只能说 ...
- 在 win11 下搭建并使用 ubuntu 子系统(同时测试 win10)——(附带深度学习环境搭建)
对于一个深度学习从事者来说,Windows训练模型有着诸多不便,还好现在Windows的Ubuntu子系统逐渐完善,近期由于工作需求,配置了Windows的工作站,为了方便起见,搭建了Ubuntu子系 ...
- mq中如何保证消息的顺序性
先说结论 不建议在mq当中使用消息的投递顺序来保证消息的顺序一致性 反思为什么需要保留消息的顺序性 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系.消息队列中的若干消息如果 ...
- 【每日一题】2021年12月14日-82. 删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排列的结果链表. 来源:力扣(LeetCo ...
- python基础语法&数据类型&运算符
1.标识符 # -*- coding:utf-8 -*- # @Time :2021/1/16 10:28 # @Author :QAbujiaban # @Email :wbxztoo@163.co ...
- TortoiseGit (小乌龟安装配置及使用)
TortoiseGit 使用教程 (图文详解) 第一步 下载Git:下载地址:https://gitforwindows.org 第二步 下载TortoiseGit 以及 汉化包 (安装教程这里就不详 ...
- JavaScript:对象:如何创建对象?
JS是面向对象的语言,除开基础数据类型,其他所有的数据类型都是对象,包括函数. 如何去理解对象,什么是对象呢? 举个例子,比如我们将日常生活中见到的猫这种动物,抽象成一个类Cat,这里不去谈类是什么概 ...
- 使用 Helm 安装 MQTT 服务器-EMQX
EMQX ️ Info: 使用 EMQX 通过 Helm3 在 Kubernetes 上部署 EMQX 4.0 集群 | EMQ emqx/deploy/charts/emqx at main-v4. ...
- 洛谷P1496 火烧赤壁【题解】
事先声明 本题解文字比较多,较为详细,算法为离散化和差分,如会的大佬可以移步去别处看这道题的思路(因为作者比较懒,不想新开两个专题). 题目简要 给定每个起火部分的起点和终点,请你求出燃烧位置的长度之 ...