在之前的文章介紹過使用ArcMap釋出GP分析服務,由於ArcGIS後續不在更新ArcMap,改用ArcGIS Pro,本文對ArcGIS Pro釋出GP分析服務進行說明。
本文以等高線分析為例,使用ArcGIS Pro軟體,從GP分析服務的建立、釋出、呼叫全過程進行演示。
使用ArcMap釋出GP服務請跳轉:ArcGIS Desktop(ArcMap)建立、釋出、呼叫GP服務全過程示例(等高線分析)
本文示例使用(因為本人portal的授權的版本只有10.5的,故使用10.5進行示例):
軟體:ArcGIS Pro3.0.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:輸出的等高線線要素
由於在ArcGIS10.3中已經建立過GP模型,ArcGIS之間的產品是相容的,可以用ArcGIS Pro開啟,故不再新建GP模型,直接使用舊版已經建立好的進行編輯:
更改輸入引數和輸出引數的檔案路徑(輸入引數選擇第一步準備好的資料,需要真實的資料,輸出引數只要設定好路徑和檔名稱即可,保證資料夾存在,檔案不需要真實存在):
修改完引數路徑後,對模型進行儲存。
注:在ArcMap10.3版本建立的GP工具可以在ArcGIS Pro開啟,但在ArcGIS Pro開啟後,就無法在ArcMap中開啟了,不同的ArcGIS版本也一樣,低版本GP工具在高版本開啟後,就無法再原來的版本中開啟,所以注意備份不同版本的工具。
3、執行併發布GP服務
(1)雙擊執行GP服務
(2)釋出服務,選擇共享->Web工具,共享Web工具:
選擇剛剛執行的GP工具:
設定釋出服務引數:
切換配置頁,選擇同步非同步等配置:
切換Content,編輯輸入輸出引數:
輸入工具名稱,備註,輸入引數,輸出引數等:
設定好後,點選分析,分析如果沒有錯誤,使用Publish釋出GP服務
4、訪問並驗證GP服務
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) }) } }
注:程式碼只是擷取的一部分程式碼,參考使用,具體呼叫根據自己的開發的實際情況來寫。
<全文完>