本文以等高線分析為例,使用ArcMap軟體,從GP分析服務的創建、發布、呼叫全程序進行演示,
使用ArcGIS Pro發布GP服務請跳轉:ArcGIS Pro創建、發布、呼叫GP服務全程序示例(等高線分析)
本文示例使用軟體:
ArcGIS Desktop10.3.1
ArcGIS JS API4.16
注:閱讀本文前需要對ArcGIS GP服務,模型構建器等有一定了解,本文不會詳細描述GP工具的構建程序,
需求:通過在前端繪制或匯入多邊形范圍,設定等高距,生成繪制區域的等高線,

1、資料準備
(1)準備一個地形檔案,可以是tif或者img等格式
(2)準備一個shp面要素檔案,用來指定分析范圍
2、創建GP模型
創建等高線分析GP模型:
(1)使用Extract by Mask工具,裁剪出輸入要素的多邊形范圍的柵格資料
(2)根據第一步裁剪的柵格結果,執行等高線分析,生成線要素

注:藍色橢圓中的為輸入引數,綠色橢圓中的是輸出引數,黃色矩形為ArcGIS工具箱中的分析工具,
引數說明:
InputFeature:等高線分析范圍資料,shp格式,可自行創建個shp檔案,在地形范圍內繪制一個范圍(使用第一步準備的shp資料),
InputRaster:地形dem資料,可以使用tif格式,支持經緯度坐標或投影坐標,根據實際情況選擇需要的地形路徑(第一步準備的地形資料)
CoutourInterval:等高線間距,默認單位米
OutputFeature:輸出的等高線線要素
3、運行并發布GP服務
(1)雙擊運行GP服務

(2)發布服務,選擇地理處理->結果,找到運行的GP結果,右鍵發布服務

設定發布服務引數:

設定好后,點擊分析,分析如果沒有錯誤,使用Publish發布GP服務
4、訪問并驗證GP服務
發布好的服務通過rest進行訪問驗證,示例:

打開GP服務執行頁面,若有示例引數,可在瀏覽器驗證GP服務,
輸入分析范圍,示例:
{"features":[{"geometry":{"spatialReference":{"wkid":4490},"rings":[[[119.26767045543811,25.942444646116375],[119.33522941013436,25.950904529325477],[119.33567059875381,25.968306654427234],[119.30431227697976,25.970283578404857],[119.28396539929878,25.960850662458895],[119.2740650356365,25.952524659479167]]]},"symbol":{"type":"esriSFS","color":[0,0,255,26],"outline":{"type":"esriSLS","color":[255,255,255,255],"width":2,"style":"esriSLSSolid"},"style":"esriSFSSolid"},"attributes":{},"popupTemplate":null}]}
并設定好等高距,輸入柵格等引數,可執行工具得出結果:

5、呼叫GP服務
先通過繪制得到繪制的多邊形graphic,然后設定引數,利用Geoprocessor來執行GP服務得到結果,再將結果的等高線繪制到地圖上,
startExcute (graphic) { const featureSet = new FeatureSet() featureSet.features = [graphic] const inputRaster = { 'url': this.demDatas[this.value].url, 'format': this.demDatas[this.value].format || 'tif' } let params = { "inputFeature": featureSet, "contourInterval": this.contourInterval, "inputRaster": inputRaster } const geop = new this.Geoprocessor(this.contourUrl) geop.outSpatialReference = { wkid: this.map.spatialReference.wkid } if (this.isAsync) { //發布的服務是異步時的處理方式 this.loading = true geop.submitJob(params).then(data => { var options = { interval: 1500, statusCallback: function (j) { // console.log("Job Status: ", j.jobStatus); } } geop.waitForJobCompletion(data.jobId, options).then(res => { geop.getResultData(res.jobId, 'OutputFeature').then(item => { this.drawLine(item.value.features) this.loading = false }) }, error => { this.loading = false this.$message.error('分析出錯,請聯系管理員!') console.error('等高線分析出錯:' + error) }).catch(error => { this.loading = false this.$message.error('分析出錯,請聯系管理員!') console.error('等高線分析出錯:' + error) }) }) } else { //發布的服務是同步時的處理方式 this.loading = true console.log('params2', params) geop.execute(params).then(data => { this.loading = false this.drawLine(data.results[0].value.features) console.log('datas', data) }, error => { this.loading = false this.$message.error('分析出錯,請聯系管理員!') console.error('等高線分析出錯:' + error) }) } }
注:代碼只是截取的一部分代碼,參考使用,具體呼叫根據自己的開發的實際情況來寫,
<全文完>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/551763.html
標籤:GIS
上一篇:ArcGIS Pro創建、發布、呼叫GP服務全程序示例(等高線分析)
下一篇:返回列表
