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()的方法我会之后单独写一篇文章来进行讲解。

  • 相关阅读:
    函数基础
    全局变量与类似配置文件的模块文件
    global语句(python学习手册422页)
    作用域实例
    变量名解析:LEGB原则
    作用域
    第三方库安装方法
    s[-1]和s[len(s)-1]
    查找特定后缀的文件
    logging日志管理-将日志写入文件
  • 原文地址:https://www.cnblogs.com/tangguobo/p/10907675.html
Copyright © 2011-2022 走看看