最近在发布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名称,如:
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代码生成的)
保存模型工具后,使用测试文件执行模型工具。在地图处理里选择结果,找到当前成果的工具,右击进行共享,发布服务。
注意:在发布参数中选择同步还是异步执行,input和output各类参数都是在模型构建器中调整好的,未展示而已。
由此,GP服务就发布好了,可以使用啦。
注:
GP服务的使用属于后台,因此尽管在发布服务时选择了同步或者异步,但是在arcgis api for js调用时,他仍旧需要时间,从而先执行其他代码。
解决这个问题可以调用dojo的All方法:
dojo / promise / all是一个函数,它接受多个promise并返回一个新的promise,当所有promises都已完成时,它将被履行。意思是说当后台都执行完之后再继续执行All函数中中的代码,上面调用时的例子就是这种用法。具体关于js promise()的方法我会之后单独写一篇文章来进行讲解。