廢話不多說,開始正題:
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...