天天看點

ArcGIS API for JavaScript開發筆記(二)GP服務REST調用

在上一節(GP模型建立及服務釋出)中,用一個簡單的例子介紹了GP模型的制作及GP服務的釋出,接下來讨論如何對釋出的服務進行REST調用。

REST,Representational State Transfer,表述性狀态轉移,是現在一種較為常用的WebService軟體架構風格(另一種是SOAP風格)。最基本的思想是将網際網路上所有的資源視為URI。

釋出服務之後,便可以在ArcGIS Server Manager中檢視

ArcGIS API for JavaScript開發筆記(二)GP服務REST調用

打開服務的REST網址,點選檢視最下面的Execute Task(如果是異步執行則為Submit Job)

ArcGIS API for JavaScript開發筆記(二)GP服務REST調用

中間是填寫參數的地方,由于模型中隻設定了三個參數,是以隻需要填寫三個參數(參數的類型需要參照ArcGIS JavaScript API中ParameterValue的值)

ArcGIS API for JavaScript開發筆記(二)GP服務REST調用

點選Execute Task執行

ArcGIS API for JavaScript開發筆記(二)GP服務REST調用

啊噢,貌似我們遇到問題了!!!

在Manager的日志裡面看一看

ArcGIS API for JavaScript開發筆記(二)GP服務REST調用

很清楚的可以看到,Python代碼的16行出問題了,回頭一看,不對啊,代碼根本就沒有16行!

去伺服器裡面看一看,代碼是這樣的:

# Esri start of added imports
import sys, os, arcpy
# Esri end of added imports

# Esri start of added variables
g_ESRI_variable_1 = u'InsertPt\\point'
# Esri end of added variables

import arcpy
dataResource=arcpy.GetParameterAsText()
jd = arcpy.GetParameterAsText()
wd = arcpy.GetParameterAsText()
name=arcpy.GetParameterAsText()
cur = arcpy.InsertCursor(dataResource)
pnt = arcpy.CreateObject(g_ESRI_variable_1)
pnt.X = jd
pnt.Y = wd
row = cur.newRow()
row.shape = pnt
row.Name=name
cur.insertRow(row)
           

原來釋出服務的時候,Python代碼被更改了,前六行代碼都是新增的,第16行代碼是:

pnt = arcpy.CreateObject(g_ESRI_variable_1)

而原來的代碼是

pnt = arcpy.CreateObject("Point")

仔細想一想,查詢相關資料,得出結論:釋出GP服務時所有ArcPy函數中雙引号内的内容都會被當成是路徑,即使有時候它不是路徑!而且系統會自動為雙引号内的内容添加臨時目錄。是以這個時候就需要通過

os.path.join(OutputRaster,"P_Raster")

(路徑)或者其他方法來處理這樣的情況。

譬如對代碼進行更新為如下:

import arcpy
dataResource=arcpy.GetParameterAsText()
jd = arcpy.GetParameterAsText()
wd = arcpy.GetParameterAsText()
name=arcpy.GetParameterAsText()
cur = arcpy.InsertCursor(dataResource)
pnt = arcpy.Point()
pnt.X = jd
pnt.Y = wd
row = cur.newRow()
row.shape = pnt
row.Name=name
cur.insertRow(row)
           

替換伺服器中的代碼,就可以運作成功了。

ArcGIS API for JavaScript開發筆記(二)GP服務REST調用

檢視伺服器中的運作結果,點已經被插入

ArcGIS API for JavaScript開發筆記(二)GP服務REST調用

注意:由于這裡是使用本地的資料釋出服務,釋出服務時資料會被傳入到資料庫。是以這裡的修改也是針對伺服器中的點資料,本地的點資料是不會改變的!如果希望本地的點能夠通過這種方式被改變,就需要将資料存入ArcSDE,并注冊到ArcGIS Server,詳見ArcGIS with Oracle安裝及直連

繼續閱讀