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,您需要注册开发者账户,进而便拥有了访问 ...
随机推荐
- WebApi如何启用Session并且使用
首先打开项目的Global.asax文件,重新方法init public override void Init() { //注册事件 this.AuthenticateRequest += WebAp ...
- C温故补缺(三):存储类声明符(auto,register,extern,static)
auto,register,extern,static 四个存储类声明符,用于定义变量/函数的作用域和声明周期 ① auto:自动变量,即普通变量,在平时定义变量时会自动赋予其auto类型 被auto ...
- SpringCLoud_Aibaba
微服务项目核心组件 https://gitee.com/gtnotgod/spring-cloud_-alibaba_-study001.git 注册中心:nacos API网关:gateway 生产 ...
- 【每日一题】【双指针、位运算】2022年2月3日-NC103 反转字符串
描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000) 答案:双指针 import java.util.*; public class Solution { ...
- 预编译SQL为什么能够防止SQL注入
前言 之前我一个搞网络安全的朋友问了我一个的问题,为啥用 PreparedStatement 预编译的 SQL 就不会有被 SQL 注入的风险? 第一时间我联想到的是八股文中关于 Mybatis 的脚 ...
- VMware ESXi 8.0 SLIC & Unlocker 集成网卡驱动和 NVMe 驱动 (集成驱动版)
发布 ESXi 8.0 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:VMware ESXi 8.0 SLIC & Unlocker 集成网卡驱动和 NVMe 驱动 (集成驱动版 ...
- Kubernetes(k8s)存储管理之数据卷volumes(二):hostPath数据卷
目录 一.系统环境 二.前言 三.hostPath数据卷 3.1 hostPath数据卷概览 3.2 创建有hostPath卷的pod 一.系统环境 服务器版本 docker软件版本 Kubernet ...
- python基础之hashilb模块、logging模块
hashlib加密模块 1.何为加密 将文明数据处理成密文数据 让人无法看懂 2.为什么要加密 保证数据的安全,防止密码泄露 3.如何判断数据是否加密 密文数据的表现形式一般都是一串没有规则的字符串( ...
- 从源码构建docker-ce
准备环境 准备一台Linux主机,并在上面安装好docker-ce,安装好make,git就可以开始编译工作了.对,就是如此简单,可能你会对此感到异或为啥要装docker,我不是准备编译这个玩意么,为 ...
- 一个sql和C#代码结合的分组求和的查询
业务描述: 业务主表(tab_main 主键 id), 供应商名称(supplier), 金额(amount 需要统计求和),还有分类( 有单独的表categoryid),集中采购标记字段(tend ...