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调用_第1张图片

打开服务的REST网址,点击查看最下面的Execute Task(如果是异步执行则为Submit Job)
ArcGIS API for JavaScript开发笔记(二)GP服务REST调用_第2张图片

中间是填写参数的地方,由于模型中只设置了三个参数,所以只需要填写三个参数(参数的类型需要参照ArcGIS JavaScript API中ParameterValue的值)
ArcGIS API for JavaScript开发笔记(二)GP服务REST调用_第3张图片

点击Execute Task执行
ArcGIS API for JavaScript开发笔记(二)GP服务REST调用_第4张图片

啊噢,貌似我们遇到问题了!!!

在Manager的日志里面看一看
ArcGIS API for JavaScript开发笔记(二)GP服务REST调用_第5张图片
很清楚的可以看到,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(0)
jd = arcpy.GetParameterAsText(1)
wd = arcpy.GetParameterAsText(2)
name=arcpy.GetParameterAsText(3)
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(0)
jd = arcpy.GetParameterAsText(1)
wd = arcpy.GetParameterAsText(2)
name=arcpy.GetParameterAsText(3)
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调用_第6张图片

查看服务器中的运行结果,点已经被插入
ArcGIS API for JavaScript开发笔记(二)GP服务REST调用_第7张图片

注意:由于这里是使用本地的数据发布服务,发布服务时数据会被传入到数据库。所以这里的修改也是针对服务器中的点数据,本地的点数据是不会改变的!如果希望本地的点能够通过这种方式被改变,就需要将数据存入ArcSDE,并注册到ArcGIS Server,详见ArcGIS with Oracle安装及直连

你可能感兴趣的:(server,REST,arcgis,服务调用,GP服务)