在之前的文章介紹過使用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) }) } }
注:代碼只是截取的一部分代碼,參考使用,具體呼叫根據自己的開發的實際情況來寫,
<全文完>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/551762.html
標籤:GIS
上一篇:camunda作業流實戰專案(表單設計器+流程編輯器,零代碼創建流程)
下一篇:返回列表
