zoukankan      html  css  js  c++  java
  • arcgis服务之GP服务的几点问题(附GP服务发布步骤)

    最近在发布GP服务时遇到了一些以前没有遇到问题,所以对GP服务进行一下总结。

    一、什么是GP服务

    GP服务,即Geoprocessing Service,意为地理处理服务,是将Arctoolbox中的工具或ModelBuilder中创建的工具发布为服务,以供Arcgis API For Javascript调用工具服务,辅助分析处理功能进行开发。

    二、GP服务的分类

    GP服务包括两类,一类是Execute task,即同步执行任务;另外一类是Submit job,即异步提交作业。

    这两种GP服务是可以在发布GP服务时设置参数来选择的。

    异步和同步定义客户端(使用任务的应用程序)如何与服务器交互并从任务获取结果。当服务设置为同步时,客户端等待任务完成。通常,同步任务快速执行 - 五秒或更短时间。异步任务通常需要更长的时间来执行,并且客户端必须定期询问服务器任务是否已完成,如果已完成,则获取结果。使用异步任务的Web应用程序必须具有实现的逻辑,以检查任务的状态并在执行完成后处理结果。ArcGIS Desktop客户端本机处理两种执行类型。

    三、GP服务的调用

    GP服务调用同地图服务影像服务那样,也是通过URL进行调用,url在调用时要使用到GPServer之后的Task名称,如:

    http://192.168.5.7:6080/arcgis/rest/services/ExplodePolygon12/GPServer/ExplodePolygon
    GP服务在调用时要输入参数,他的值必须是html或JSON格式。
    例:
    var boudingGraphic = new Graphic();
    boudingGraphic.geometry = boundingGeom;
    
    var boudingFeature = new FeatureSet();
    boudingFeature.features = [boudingGraphic];
    
    var queryFeatures = new FeatureSet();
    queryFeatures.features = features;
    
    var bufferDist = selectSite.bufferDistance[layerIndex];
    
    var gpUrl = selectSite.dataConfig.GeoprocessingService.SelectSite_Buffer;
    var gp = new Geoprocessor(gpUrl);
    
    var linearUnit = new LinearUnit({
           "distance": bufferDist,
           "units": "meters"
    });
    
    var gpParams = {
           "BoudingFeature": boudingFeature,
           "QueryFeatures": queryFeatures,
           "BufferDistance": linearUnit
    }
    
    var selectSitePromiseArr = [];
    selectSitePromiseArr.push(gp.execute(gpParams));
    All(selectSitePromiseArr).then(function (diffResults) {
          console.log(diffResults);
    })
     

    这样就可以在arcgis api for js中使用GP服务了。

    四、GP服务的制作与发布

    1、创建模型构建器

    点击下图图标

    打开之后创建模型。可打开ArcToolbox,将需要的工具拖入模型构建器后,调整各参数,从而制作模型(模型构建器是使用arcpy代码生成的)

    创建模型

    保存模型工具后,使用测试文件执行模型工具。在地图处理里选择结果,找到当前成果的工具,右击进行共享,发布服务。

    发布GP工具

    注意:在发布参数中选择同步还是异步执行,input和output各类参数都是在模型构建器中调整好的,未展示而已。

    由此,GP服务就发布好了,可以使用啦。

    注:

    GP服务的使用属于后台,因此尽管在发布服务时选择了同步或者异步,但是在arcgis api for js调用时,他仍旧需要时间,从而先执行其他代码。

    解决这个问题可以调用dojo的All方法:

    dojo / promise / all是一个函数,它接受多个promise并返回一个新的promise,当所有promises都已完成时,它将被履行。意思是说当后台都执行完之后再继续执行All函数中中的代码,上面调用时的例子就是这种用法。具体关于js promise()的方法我会之后单独写一篇文章来进行讲解。

  • 相关阅读:
    Linux 安装SonarQube
    Linux 安装postgresql
    如何为chrome浏览器设置socks5代理
    echarts tab切换宽度变为100px解决方案
    将url参数转为对象
    一行js代码实现时间戳转时间格式
    解决问题的方法论
    李笑来的幻灯课
    随便写写(最近更新于2021/07/18早)
    谈谈装系统这件事
  • 原文地址:https://www.cnblogs.com/tangguobo/p/10907675.html
Copyright © 2011-2022 走看看