ArcGIS API For JavaScript使用自定義GP服務

通過本篇博客,你將會學習如何通過ArcMap發佈自定義GP服務和如何通過ArcGIS API For JavaScript API調用發佈的自定義GP服務。

使用ArcMap發佈自定義GP服務

在ArcMap中使用執行軟件自身提供的工具箱或者執行自己定義的ModelBuilder亦或者執行自己創建的工具,無論執行成功與否,在ArcMap的Results窗口中都會有相應的記錄。在Results窗口中,展開剛剛執行的任務可以查看此任務的執行的詳細情況,也可以通過這些描述查看任務執行失敗的原因。

在打開的窗口中,右鍵想要發佈的成GP服務的工具或者模型,然後依次選擇Share AsGeoprecessing 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("抱歉,執行插值操作失敗,請重新點擊!");
                };
			}
		})
	})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章