zoukankan      html  css  js  c++  java
  • ArcGIS Server GP服务发布与测试(基础版)

    版本: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。

  • 相关阅读:
    分公司下拉框赋值-从后台传到前端jsp
    EASYUI DATAGRID加合计
    Quartz_TimeJob例子(C#)
    JAVA项目如何打开,打开乱码怎么办,字体太小怎么办,感叹号是什么情况
    下拉框设置下拉列表宽度
    获取dataset结果集的第一行第一列字段
    安装visio冲突
    ubuntu创建普通用户,解决远程登录失败
    ubuntu中文环境配置
    stackoverflow访问慢
  • 原文地址:https://www.cnblogs.com/mumu122GIS/p/6097687.html
Copyright © 2011-2022 走看看