ArcGIS Runtime 100.0 SDKs 于2016年11月发布,是ArcGIS Runtime采用全新架构下的第一个商业版本,新架构下的Runtime采用了统一的API,方便用户使用的同时也使得跨平台开发更加容易。而Local Server(只存在于Runtime for .NET的WPF端、Runtime for Java以及Runtime for Qt中,需要单独安装)是桌面端所特有的模块,我们访问、编辑本地mpk(map package),执行本地gpk(geoprocessing package)都依赖于它。最近遇到不少做过Engine开发的用户询问ArcGIS Runtime中执行GP工具的问题,比如Runtime中是否也和Engine一样使用Geoprocessor.Execute执行GP?其参数是否也是用要素类的绝对路径方式输入?答案是不一样,Runtime中执行GP工具要复杂的多,首先需要将GP或model打包成gpk;其次,参数也不像Engine那样直接使用要素类的绝对路径就行。鉴于网上关于这一块的资料少之又少,而Runtime的官方帮助中仅提供了执行在线GP Service的示例,因此,本文主要介绍下Runtime中如何执行本地的gpk,主要包括Desktop中创建gpk的流程以及ArcGIS Runtime SDK for .NET 100.0中执行gpk的方法及遇到的问题。鉴于篇幅比较长(其实是图比较多~),本文主要介绍下Desktop中创建gpk的流程以及Runtime程序的搭建,后面一篇文章中重点介绍下ArcGIS Runtime SDK for .NET 100.0中执行gpk的方法以及遇到的问题。
本文以3D Analyst工具箱中的Interpolate Shape工具为例,根据DEM影像为一条2D线内插出Z值。该工具的用法参考:工具帮助
由于自定义脚本工具更容易控制输入输出的参数及其数据类型,因此我们不直接调用Interpolate Shape工具而是自定义脚本工具。
1,创建脚本工具之前需要先新建一个InterpolateShape.py文件,文件中调用InterpolateShape_3d工具并且暴露出三个参数:输入的线要素、输入的栅格数据以及输出的线要素,内容如下:
import arcpy, math
inputLine = arcpy.GetParameterAsText(0)
inputRaster = arcpy.GetParameterAsText(1)
outputLine = arcpy.GetParameterAsText(2)
rlt = arcpy.InterpolateShape_3d(inputRaster,inputLine,outputLine)
2,在ArcMap中添加脚本工具,右键.tbx选择Add->Script。
在弹出界面中输入脚本工具的Name,Label等信息,点击下一步指定该InterpolateShape.py文件所在的位置。再下一步是参数的设置(很重要),需要设置输入输出参数的Display Name以及Data Type,这里我们暴露出三个参数,第一个参数是inputLine,也就是输入的线要素,指定类型是Feature Set(这点很重要,如果类型是Feature Class,Runtime中是无法调用的),需要为该Feature Set选择一个Schema,这里可以事先新建一个与该栅格数据具有相同空间参考的线要素类;第二个参数是inputRaster,即输入的Surface表面,这里使用.tif格式的DEM数据,类型是Raster Dataset;第三个参数是输出的要素类,类型是Feature Class,点击完成即可,界面如下:
3,在ArcMap中执行该脚本工具,首先在ArcMap中添加该DEM栅格影像(以便定位),然后打开该脚本工具,输入inputLine为在Map上进行人机交互所画的线,输入的Raster为tif格式的本地DEM数据,点击确定,如下图:
4,生成.gpk。执行该脚本工具成功后,在Results界面选中刚刚执行成功的工具右键选择Share As->Geoprocessing Package。
tips:如果您的界面中没有这一选项,那么需要在ArcMap的菜单项Customize -> ArcMap Options -> Sharing选项卡 -> 勾选Enable ArcGIS Runtime Tools。
在弹出界面中指定输出.gpk的路径并且勾选Support ArcGIS Runtime复选框,如下图:
参数界面中输入参数inputLine的Input mode选择User defined value,即用户指定输入:
输入参数inputRaster选择Constant value,也就是采用默认参数,无需代码中指定。outputLine参数保持默认即可。
最后进行Share,Share之前建议先执行Analyze,这时会提示下面的错误:
我们按照提示添加Tags和Summary,点击确定即可发布成功。
首先安装软件,需要安装ArcGIS_Runtime_SDK_DotNet_100_0_0.vsix和ArcGIS_Runtime_Local_Server_SDK_100_0_0.exe,注意Local Server 是可选的,如果不需要加载本地mpk和执行gpk,是不需要安装的(10.2.X版本中是必装的),还要注意查看下机器环境是否符合ArcGIS Runtime 100.0的系统需求。
安装完软件后就可以搭建工程了,创建模版工程,在VS的File ->New Project 界面左侧选择Classic Desktop,右侧选择ArcGIS Runtime Application (WPF),如下图:
然后右键References选择Manage NuGet Packages,弹出界面中点击Restore来修复引用,如下图:
由于执行gpk必须用到Local Server,因此需要在工程中添加LocalServices引用:
这时程序就可以直接运行成功了,如下图:
准备工作做好了,接下来就可以编写代码了。这一部分将在下一篇文章中介绍,敬请期待…