ArcGIS Server GP服务发布与测试(基础版)

1
分享 2016-12-31
版本:ArcGIS Server 10.4 环境:win10
测试目标:创建一个GP服务,功能为根据要素属性信息(如FID)选择出输入内容的对应匹配要素。
注:这个测试非常基础,仅供新手发布GP服务练习。
如图所示,数据源为两个图层,分别是中国行政区全图(蓝色)与中部几个省份行政区(浅绿色)。

其中中部几个省份所在的ChinaCopy图层中,各要素信息如下。

新建Toolbox.tbx,在其中新建Model。

模型如下图所示,输入有:带选择图层 和 sql语句(如”FID” = 181)

模型构建过程
(根据上图将四个部分分别标记为①②③④,以下用数字标记来简称这四个部分)
首先将select 工具拖进 Model 编辑窗口:

接着在①上右键,添加变量,有两个选择,从Parameter或Environment,从下图可知Parameter即select工具需要输入的内容。选中Input Features。

同理将Expresssion也选择。

此时各部分内容都是白色,表明模型还不能顺利运行。需要设置默认参数。分别双击②、③、④,将默认参数输入。

此时模型各部分变为彩色。点击上方图标运行模型。若成功表示模型没问题。

此时还需一步设置,如下图:右键③并设置为Model Parameter使其作为模型输入参数,否则之后运行模型时会使用刚才设置的默认参数,输入参数无法修改。同理设置②、④。

最终结果:

关闭模型编辑窗口(选择保存)。
双击模型运行。

运行成功后,在Results窗口找到刚运行的结果,右键发布GP服务。
注:如果没有Results窗口,可以在ArcMap最上方,Geoprocessing→Results打开。如下图所示。

发布服务时需要注意几点:
①选中 以地图服务查看结果,这样之后在rest路径下测试运行GP服务时,可以以地图服务的形式查看运行结果。设置如下图所示:

②模型相关的参数:输入要素、输入查询条件、输出要素,都需要进行描述,否则分析时会报错。

另外如上图所示,此时模型输入要素是ArcMap中加载的三个图层,发布的GP工具也只能以它们作为输入。(应该)也可以使用用户自己输入,不过还没测试(2016年11月28日,已测试,见文末)。
之后点分析、发布。发布成功后在server manager中查看GP服务。

如上图所示,会有两个同名服务,一个GP服务,一个地图服务(GP服务默认运行结果)。
Rest路径下,可以看到tasks和相关信息。

点击上图tasks下的Model。可以看到(如下图所示)输入参数的可选项,表达式的默认值等信息。
这里复制Choice List中的“ChinaCopy”方便下一步测试时填写“输入要素”。

点击上图中的Submit Job(位置在页面最下方)。这里我们选择ChinaCopy作为输入,利用GP工具选择出其中FID为3861的要素。点击 Submit Job


Job Status 为运行结果。

Check Job Details Again 查看具体信息。等到出现如下结果,即运行成功,点击Results下的结果图层查看。

如下图所示,陕西区域已被查询出来。


关于输入要素设置为用户自定义的方式(以下测试略基础,对于未能实现的功能不代表sever不支持,很可能是笔者还不知道该部分内容,以下仅供参考)。
若不选择设置为用户自定义,则GP工具的通用性大大降低。设置用户自定义后,主要问题在于,怎样输入用户自定义的要素?
如下图(上文使用的GP服务删掉了,这里界面和上文略有差异)所示GP服务(名称为 Model),输入部分为json格式的字符串。

名为Model的GP服务所使用数据源如下图所示:

因为这里的目的是测试用户自定义的数据源是否可以使用该GP服务,即该GP服务中包含的数据源不可以再使用。
为了获取该GP服务中所需输入的这种格式的字符串,这里使用不同数据源(仅文档名称、要素形状与上面GP服务所使用数据源不同,属性表、空间参考等都相同)、相同模型,另外发布第二个GP服务,这样就有了与上图相同格式(而数据源不包含在上图GP服务中)的新GP服务。新GP服务数据源如下图所示。

打开新的GP服务(新服务名称为 Model2)到如下位置:拷贝输入要素后面的字符串。

将字符串粘贴到名为Model的第一个GP服务对应位置,执行GP服务。(即 GP服务 + 输入要素为未包含在该GP服务数据源的要素(用户自定义要素) )
运行结果如下所示,显然该要素并非Model GP服务所包含的数据源,即可以使用用户自定义要素作为GP服务的输入(不过格式写起来比较麻烦)。

那么会不会是因为输入要素为在线的服务才可以使用呢~
为了验证,将新发布的Model2 GP服务删除,再执行一次上述查询,结果相同,即是否在线的服务并不影响。
那么自己写一个格式相符的可以吗?
这里我们修改一下复制粘贴的输入要素字符串(具体修改见下图后)。之后执行查询,可以顺利执行。
虽然只修改了一个坐标点位置,不过足以证明自己写一个格式相符的字符串,可以作为GP服务的输入要素。


输入要素的描述字符串 原内容如下: 上图测试修改了其中 45.669056117345974 将5修改为2 变为 42.669056117345974
{ "displayFieldName": "", "geometryType": "esriGeometryPolygon", "spatialReference": {"wkt": "GEOGCS[\"GCS_User_Defined\",DATUM[\"D_User_Defined\",SPHEROID[\"User_Defined_Spheroid\",6378140.0,298.2569978029123]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]"}, "fields": [ { "name": "FID", "type": "esriFieldTypeOID", "alias": "FID" }, { "name": "test", "type": "esriFieldTypeInteger", "alias": "test" }, { "name": "Shape_Length", "type": "esriFieldTypeDouble", "alias": "Shape_Length" }, { "name": "Shape_Area", "type": "esriFieldTypeDouble", "alias": "Shape_Area" } ], "features": [ { "attributes": { "FID": 2, "test": 0, "Shape_Length": 15.104826430687684, "Shape_Area": 13.532019237916634 }, "geometry": {"rings": [[ [ 92.37279530645827, 44.18050407480325 ], [ 95.79808090900679, 42.857533865595485 ], [ 95.89439759507303, 41.13479398735268 ], [ 92.37279530645827, 41.13479398735268 ], [ 92.37279530645827, 44.18050407480325 ] ]]} }, { "attributes": { "FID": 1, "test": 0, "Shape_Length": 12.598930062798257, "Shape_Area": 5.718694943441873 }, "geometry": {"rings": [[ [ 99.2482993672221, 45.669056117345974 ], [ 101.62889861977555, 43.97824988942091 ], [ 101.62889861977555, 41.503610443367336 ], [ 96.86997660813404, 41.503610443367336 ], [ 99.2482993672221, 42.669056117345974 ] ]]} }, { "attributes": { "FID": 0, "test": 0, "Shape_Length": 14.035782149398706, "Shape_Area": 12.17378909335935 }, "geometry": {"rings": [[ [ 96.84618199740135, 47.39277643288614 ], [ 99.89189208485192, 47.39277643288614 ], [ 100.69977058054792, 44.21570577180398 ], [ 96.84618199740135, 43.58563882357288 ], [ 96.84618199740135, 47.39277643288614 ] ]]} } ], "exceededTransferLimit": false}
可以看出,字符串是对数据源中三个多边形的描述, 每个多边形有四个点,描述中从左上角点开始顺时针,最后返回左上角点,共五个坐标。
在ArcMap中对比查看修改前后:



GP服务 输入自定义要素如此麻烦,共享GP服务,不如直接拷贝模型?
首先,笔者对GP服务仅刚做了基础测试,很可能有更方便的使用方法还不知道,有待学习一个。
另外,这里需要提及GP服务在ArcMap中的使用。
如下图所示,在ArcMap中连接Server,找到GP服务,可以直接运行模型。这也就意味着如下场景:甲制作模型M,发布为GP服务,任意机器上安装的ArcMap连接上该服务,就可以使用模型M。

文章来源:http://www.cnblogs.com/mumu122GIS/p/6097687.html

0 个评论

要回复文章请先登录注册