Arcgis server rest请求参数使用数据库表或者shp文件地址
@风吹四季
arcgis server rest 调用如何使用数据库表或shp文件作为参数并保存结果到数据库
arcmap 与arcgis server
近期在研究gp服务的过程当中,比如两个图层相交的简单功能,在arcmap建立模型并运行成功发布为服务以后,却只能传递符合要求的json数据或者提供json结构的文件url可访问地址。这种对于小量的数据进行相交运算,基本没有影响,但实际的应用中,我们计算的可能是两个大图层的相交运算,对于这种方式传递参数就是一种灾难,而且实际的测试中发现,基本无法运行大内容的json。思考:在arcmap中可以直接拖拽shp文件,那为什么在arcgis server 中不可以传递文件地址呢。。。百度无果。。。苦恼。。。度娘里找不到答案 那就回过头来研究arcmap,哀莫大于无助。。。
前置条件
使用此方法默认你对arcmap和arcgis server 已经有一定的了解。
1.注册你的sde到sever。(为实现可以传参和生成结果到数据库做准备)
具体实现就是在arcmap新建的database链接后生成的sde放入到server中去 。
参照下图:
(怎么创建sde?,, 新建一个db链接就会生成一个xxx.sde)
2.注册你的shp文件所在目录的上一级目录到server(为server可以读取你的shp文件做准备。 例:d:\test\a.shp 则把 d:\test 托管进去)
参照下图:
参数:shp文件或者数据库表
注意:数据库表指的是你通过shp文件导入到sde数据库中或者符合地理图层结构的表。
模型参考下图:
做一些说明 %StringONE%指的是应用 变量StringONe的值 ,这么做的目的是发布为gp服务以后的动态传参(传递表名字符串,其他类似)
StringONE 的值
具体值看自己想传递那张表 server中会看到。
双击看一下%StringONE%的值,如下图:
这里的sde 指的就是之前注册的sde库 。这里我是单纯引用表名,如果我们把StringONE 的值设置为 test 则此处的值在实际中就会变为:e:/test/test.sde/testgp.test 也就testgp用户的test 表(文件位置,数据库用户和表看自己实际改变)。
鄙人使用了好多方式,绝对路径或者修改工作空间等等,发现都无法在arcgis server 中把结果拽到指定的目录中去(求高手解答),所以只能在生成的结果图层中通过features class to geodatabase 功能把结果拽到数据库中去。双击features class to geodatabase 配置如下图:
调试发布。 rest调用 下图:
图中三个参数的作用:两个表输入,一个生成表,都是表名。前两个参数是数据库中一定要存在的表,后一个是会生成的表。同理,使用shp文件的过程和此类似,下图所示,不在做赘述。
rest调用的界面:
同理:三个参数 前两个是shp文件的地址,后一个是数据库要生成的表。
关于更多arcgis 探索,欢迎交流。