通過本篇博客,你將會學習如何通過ArcMap發佈自定義GP服務和如何通過ArcGIS API For JavaScript API調用發佈的自定義GP服務。
使用ArcMap發佈自定義GP服務
在ArcMap中使用執行軟件自身提供的工具箱或者執行自己定義的ModelBuilder亦或者執行自己創建的工具,無論執行成功與否,在ArcMap的Results窗口中都會有相應的記錄。在Results窗口中,展開剛剛執行的任務可以查看此任務的執行的詳細情況,也可以通過這些描述查看任務執行失敗的原因。
在打開的窗口中,右鍵想要發佈的成GP服務的工具或者模型,然後依次選擇Share As、Geoprecessing Services打開服務發佈窗口。
-
如果想發佈一個新的GP服務,則選擇選擇Publish a service;如果想覆蓋已存在的GP服務,則選擇Overwrite an existing service;如果只想發佈一個服務定義文件,則選擇第二項。這裏我們選擇第一項,發佈一個新GP服務。點擊“下一步”按鈕,打開下一步操作。
-
在這一步中,選擇一個ArcGIS Server連接,也就GP服務打算在哪個ArcGIS Server上發佈,然後自定義服務名稱。點擊“下一步”按鈕,打開下一步操作。
-
在這一步中,需要配置GP服務在ArcGIS Server服務器上的存儲位置,可以創建一個新的文件夾,也可以選擇已存在的文件夾。如果選擇root文件夾,則發佈的服務在ArcGIS Server首頁中會看到,如果選擇其他文件夾,則需要切換。點擊“Continue”按鈕,打開下一步操作。
-
在Service Editor窗口中,可以配置服務的其他參數。一般的流程是,首先點擊右上角的“Analyze”按鈕,讓軟件自動分析當前服務如果要發佈會存在哪些問題。通常情況下,如果分析結果中沒有Error這一項,就可以點擊Publish按鈕發佈服務了。在分析結果,雙擊某一項分析結果,當前窗口會自動
跳轉到這個結果的配置界面。在這一步需要值得注意的是,如果需要在JS API中獲取GP服務的執行結果,一定要勾選View results with a map serveice。顧名思義,勾選這個以後,可以以調用MapService的方式調用GP服務的執行結果。
ArcGIS API For JavaScript 使用發佈的自定義GP服務
在JavaScript API中調用自定義GP服務與調用ArcGIS Server自帶的GP服務方式是一樣的,首先呢,需要在ArcGIS Server中獲得GP服務的調用地址。
-
在ArcGIS Server頁面找到我們想調用的GP服務,然後點擊服務名稱,打開該服務的詳細信息界面。
-
點擊左側的Capibilities選項卡,然後點擊右側的Rest URL地址,打開一個新的標籤頁。
-
在新的標籤頁中,點擊Tasks下面的工具/模型名稱,然後複製瀏覽器中URL,這就是我們要使用的GP服務的調用地址。在這個頁面中,也可以查看這個GP服務的參數信息。
接下來要做的就是在JS代碼中調用這個GP服務。這個調用方式也比較簡單,首先需要做的就是在dojo中引入"esri/tasks/Geoprocessor",然後使用GP服務地址初始化Geoprocessor、配置GP服務參數、調用submitJob函數執行GP服務,最後在異步函數中獲得GP服務的返回結果。
示例代碼如下:
define(["esri/tasks/Geoprocessor"],
function(Geoprocessor) {
returen declare(null, {
gp_example: function() {
var gp_service_url = "https://localhost:6443/arcgis/rest/services/IDW/Model2222/GPServer/IDW_24"; // GP服務地址
// 配置GP服務參數
var gp_parameters = {
ZValue: "rain",
OutputCellSize: 0.005
};
var idw_gp = Geoprocessor(gp_service_url);
idw_gp.submitJob(gp_parameters, gp_job_complete, gp_job_status, gp_job_failed);
// GP服務執行完成後異步調用
function gp_job_complete(job_info) {
idw_gp.getResultImageLayer(job_info.jobId, null, null, function(layer) {
var gp_result_lyrs_url = layer.url; // 獲取GP服務執行結果的訪問地址,如果想訪問某個結果,可在後面添加"/" + 結果的索引號(從0開始)訪問
};
// 訪問GP服務的執行狀態
function gp_job_status(job_info) {
var job_status = "";
switch (job_info.jobStatus) {
case "esriJobSubmitted":
job_status = "提交插值任務...";
break;
case "esriJobExecuting":
job_status = "插值處理...";
break;
case "esriJobFailed":
job_status = "插值失敗";
alert("抱歉,執行插值操作失敗,請重新點擊!");
break;
case "esriJobSucceeded":
job_status = "插值成功";
break;
}
};
// GP服務執行失敗後異步調用
function gp_job_failed() {
alert("抱歉,執行插值操作失敗,請重新點擊!");
};
}
})
})