ArcGIS API for JavaScript开发笔记(二)GP服务REST调用
2016-03-08 20:18
288 查看
在上一节(GP模型创建及服务发布)中,用一个简单的例子介绍了GP模型的制作及GP服务的发布,接下来讨论如何对发布的服务进行REST调用。
REST,Representational State Transfer,表述性状态转移,是现在一种较为常用的WebService软件架构风格(另一种是SOAP风格)。最基本的思想是将互联网上所有的资源视为URI。
发布服务之后,便可以在ArcGIS Server Manager中查看
打开服务的REST网址,点击查看最下面的Execute Task(如果是异步执行则为Submit Job)
中间是填写参数的地方,由于模型中只设置了三个参数,所以只需要填写三个参数(参数的类型需要参照ArcGIS JavaScript API中ParameterValue的值)
点击Execute Task执行
啊噢,貌似我们遇到问题了!!!
在Manager的日志里面看一看
很清楚的可以看到,Python代码的16行出问题了,回头一看,不对啊,代码根本就没有16行!
去服务器里面看一看,代码是这样的:
原来发布服务的时候,Python代码被更改了,前六行代码都是新增的,第16行代码是:
仔细想一想,查询相关资料,得出结论:发布GP服务时所有ArcPy函数中双引号内的内容都会被当成是路径,即使有时候它不是路径!而且系统会自动为双引号内的内容添加临时目录。所以这个时候就需要通过
譬如对代码进行更新为如下:
替换服务器中的代码,就可以运行成功了。
查看服务器中的运行结果,点已经被插入
注意:由于这里是使用本地的数据发布服务,发布服务时数据会被传入到数据库。所以这里的修改也是针对服务器中的点数据,本地的点数据是不会改变的!如果希望本地的点能够通过这种方式被改变,就需要将数据存入ArcSDE,并注册到ArcGIS Server,详见ArcGIS with Oracle安装及直连
REST,Representational State Transfer,表述性状态转移,是现在一种较为常用的WebService软件架构风格(另一种是SOAP风格)。最基本的思想是将互联网上所有的资源视为URI。
发布服务之后,便可以在ArcGIS Server Manager中查看
打开服务的REST网址,点击查看最下面的Execute Task(如果是异步执行则为Submit Job)
中间是填写参数的地方,由于模型中只设置了三个参数,所以只需要填写三个参数(参数的类型需要参照ArcGIS JavaScript API中ParameterValue的值)
点击Execute Task执行
啊噢,貌似我们遇到问题了!!!
在Manager的日志里面看一看
很清楚的可以看到,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)
替换服务器中的代码,就可以运行成功了。
查看服务器中的运行结果,点已经被插入
注意:由于这里是使用本地的数据发布服务,发布服务时数据会被传入到数据库。所以这里的修改也是针对服务器中的点数据,本地的点数据是不会改变的!如果希望本地的点能够通过这种方式被改变,就需要将数据存入ArcSDE,并注册到ArcGIS Server,详见ArcGIS with Oracle安装及直连
相关文章推荐
- javascript中定义事件的三种方式
- reverse linked list--javascript
- jsp与servlet的传值问题
- JavaScript学习笔记
- javascript中的AJAX
- javascript:数值类型null和undefined
- EXTJS 中 radiogroup 的各项所占的宽度不同的解决办法
- infinite scroll和masonry实现的json类型瀑布流
- 未优化的dijsktra(参考YSQ)
- Extjs RadioGroup中Radio的切换
- js事件处理函数中return的作用
- js字符串操作总结
- 彻底理解js中this的指向
- js中使用进行字符串传参
- JavaScript面试库
- Javascript 操作 json 会遇到什么坑?
- javascript创建对象总结
- chrome firefox中JS回车登录
- JS浏览器兼容问题
- 编写跨浏览器的javascript代码必备[js多浏览器兼容写法]