GP服務的使用詳解

2021-08-22 11:26:00 字數 3887 閱讀 9683

廢話不多說,開始正題:

gp工具:它是由arcmap等桌面的gis應用生成的,生成的方式是使用模型構建器將需要的工具和引數拖進去,然後把工具和引數進行關聯,最後生成乙個流程圖。將流程圖進行驗證,如果成功了就可以進行發布,發布後就是gp工具了。

gp工具的具體製作過程就不贅述了,網上有著相關的教程。

gp工具流程截圖

在製作gp工具的時候有幾個細節要注意,如果使用插值等工具,需要將插值範圍給限定出來--右擊idw選擇屬性--選擇處理範圍

--選擇你的向量邊界,這樣他處理就以邊界形狀執行;還有要說的就是柵格計算器,在使用時需要注意值的選擇,以及公式的使用(我發現數的次方和float型別的數不能相乘,會報錯),gp工具在arcgis中能正常執行的話,基本上就沒有什麼問題,最後將需要的引數選為p就行。我這裡的點資料是shp格式。

標頭檔案的引用:

//邊界資料//地圖資料

我使用的是lealeaflet的開源js加上arcgis api for js,剛開始以為兩個不通用,後來發現竟然是一家的東西,好吧果然是相愛一家親。

地圖載入部分js:

/**

* 智圖地圖內容

*/var normalm1 = l.tilelayer.chinaprovider('geoq.normal.map', );

var normalm2 = l.tilelayer.chinaprovider('geoq.normal.color', );

var normalm3 = l.tilelayer.chinaprovider('geoq.normal.purplishblue', );

var normalm4 = l.tilelayer.chinaprovider('geoq.normal.gray', );

var normalm5 = l.tilelayer.chinaprovider('geoq.normal.warm', );

var normalm6 = l.tilelayer.chinaprovider('geoq.normal.cold', );

/*** 天地圖內容

*/var normalm = l.tilelayer.chinaprovider('tianditu.normal.map', ),

normala = l.tilelayer.chinaprovider('tianditu.normal.annotion', ),

imgm = l.tilelayer.chinaprovider('tianditu.satellite.map', ),

imga = l.tilelayer.chinaprovider('tianditu.satellite.annotion', );

var normal = l.layergroup([normalm, normala]),

image = l.layergroup([imgm, imga]);

/*** 谷歌

*/var normalmap = l.tilelayer.chinaprovider('google.normal.map', ),

satellitemap = l.tilelayer.chinaprovider('google.satellite.map', );

/*** 高德地圖

*/var gaode = l.tilelayer.chinaprovider('gaode.normal.map', );

var gaodimgem = l.tilelayer.chinaprovider('gaode.satellite.map', );

var gaodimga = l.tilelayer.chinaprovider('gaode.satellite.annotion', );

var gaodimage = l.layergroup([gaodimgem, gaodimga]);

var baselayers =

var map = l.map("map", )

l.control.layers(baselayers, null).addto(map);

l.control.zoom().addto(map);

//載入鎮級地圖

var jzmap= l.geojson(statesdata, ;

default: return ;}}

}).addto(map);

這裡實現了可更換地圖的功能

接下來是重頭戲:實現gp工具的**

/**

* 呼叫gp服務

*/var gpurl = "http://localhost:6080/arcgis/rest/services/jztext/cztr/gpserver/cztr";//定義gp工具的url

var mapserver="http://localhost:6080/arcgis/rest/services/jztext/cztr/mapserver";//該url需要在arcgis server中使用非同步的執行模式開啟含檢視地圖服務的結果,位置在該服務的引數中

map.on("click", function (e) ;

//執行取樣點查詢方法,query是引數,function是成功後呼叫的方法

//alert(query);

querytask.execute(query, function (fs) ;

submitjob1(params);//改函式為非同步執行函式,用於首席執行官時間的服務

})})

//gp服務呼叫

function submitjob1(params)

}});

}//獲取結果

function getresult1(jobid)

else

}});

}//展示地圖結果

function showresult1(jobid) );//新建動態圖層

map.addlayer(envlayer);//加入地圖

var lenurl=mapurl+"/legend?f=pjson";//圖例的url

getlegend(lenurl);//載入圖例

}function getlegend(lengendurl)

hmts += '

'; //定義控制項

var legend = l.control();//將圖例的位置放置在右下角

//對圖例進行判斷,如果已經存在,將先移除之前的圖例,避免圖上出現多個圖例

if ($(".info_legend_div").length > 0)

legend.onadd = function (map) ;

legend.addto(map);//將legend新增進地圖}})

}

注釋我已經寫得非常詳細了,就不多解釋。

我想說一下關於gp傳值的問題,我們雖然生成好了gp工具,但我們還需要去知道需要給gp工具傳什麼引數才是有效值,我使用的json和post的方法。想要驗證gp的輸入值是否有效可以使用gp工具自帶的submitjob來進行測試,將你的資料格式放入其中然後驗證其是否正確,如果正確的話會有返回值的。

如果你取到的資料在這裡可以正常得到結果,那就是沒有問題的,你可以放心大膽的在web端使用。

在進行web端的傳值除錯時,我走了不少彎路,最後在前輩的幫助下完成了該功能,我得好好去學會ajax和json。

最後奉上幾個大佬部落格傳送門,我在其中學到了不少。

動態插值分析:

插值分析結果按指定多邊形輸出:

GP伺服器日誌

日誌檔案對於確定出錯的原因可以提供更多的資訊。master和每個segment instance都有自己的日誌檔案,位於資料目錄下的pg log中。master的日誌檔案包含著最多的資訊,應該總是首先檢查master日誌檔案 一 概述 master的日誌位於 pg log下,各segment的日誌在...

通過Ajax的方式執行GP服務

概述 思路 按下f12開啟谷歌的除錯工具,切換到網路,再執行,可以看到gp執行時請求的url,如下 在瀏覽器中分別開啟1,2,3,可以開到各自的請求結果如下 說明 從2中,可以看到,編號為2的url執行了三遍,在此,我個人的理解是2的請求有時候返回不了結果,所以一直請求,直到請求成功。關鍵 var ...

ArcGis For JS 在呼叫GP服務出錯

在使用等值線服務時,報unable to complete operation.無法完成操作,1 看看自己的專案引用的gp服務路徑是否正確。例如 var gptask new geoprocessor http localhost 6080 arcgis rest services test den...