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()的方法我會之后單獨寫一篇文章來進行講解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM