以前对于arcgis只是给美国那边解决一些简单的小问题,毕竟那边没有什么专门的人来做arcgis开发,最近自己这边的设计也快出来了, 开始准备开始做系统开发,从目前的开发框架上来说,自己还主要是学习使用rest的方式来开发arcgis中的功能。之所以选择rest开发主要有两个原 因:第一是项目的具体需求需要;第二的原因是arcgis server的rest开发方式实现了我多年梦寐以求的GIS开发模式。其实这arcgis最有魅力的地方还是arcgis server中的geoprocessing的部分,如果你选择了使用这种开发模式的话,我相信你的代码量将会减少到只有原来的三分之一左右,如果是要是需要arcgis中多个功能之间进行组合的话,那这样的方式更适合你。
想要了解arcgis server中的geoprocessing service 的 话,首先应该了解是arcgis desktop中的arctoolbox和ModelBuilder部分,因为要使用geoprocessing service需要发布的是arctoolbox,在实际调用的时候只要根据参数和服务地址来调用相应的服务。自己在学习这方面的资料的时候看的资料都是 零零散散的,只有在youku上看见了一个arcgis的培训视频之后才慢慢的明白其中的一些意思。
首先介绍一下modelbuilder,打开一个arcmap或者是catalog,然后打开arctoolbox中新建一个arctoolbox,然后你可以之间将相关的arcmap中的一些arctoolbox中的一些功能直接拖拽到你新建的modelbuilder中去,这样发布出去的geoprocessing服务与具体的地图没有关系,这样发布出来的服务能够被任何应用程序调用,不过需要对于数据的输入输出必须得满足您所选择的开发模式。具体的数据支持请参考:input and output data types,大家目前习惯的开发模式为rest开发方式,而且很多的事情是直接在web应用中去调用geoprocessing service的服务。
对于geoprocessing service的服务发布存在两种方法,第一种是直接使用arcgis server manager来发布服务,一般来说如果是仅仅简单的进行发布一个geoprocessing service的话,那直接在新建service中新建一个geopeocessing service;另外一种发布geoprocessing service的方式是使用catalog的方式进行部分。 Geopeocessing service 其实有三种:
- A geoprocessing service
- A geoprocessing service with a source map document
- A geoprocessing service with a result map service
关于三种service的大概可以理解成:
关于geoprocessing service的具体表现实现可以参考:Publishing geoprocessing services这 样的话如何创建一个geoprocessing service的相关信息我们就已经清楚,在后面我会很据我学习到的东西来发布一个geoprocessing service,已经如何使用python语言来简单的对geoprocessing 的功能进行简单的扩展以及使用javascript调用geoprocessing serivce以及如何更漂亮的展示结果。
(一)
大家好!我是GIS理想!今天我主要讲讲基于ArcGIS Server9.3的GP(Geoprocessing)服务的发布,此过程主要涉及到ArcMap里对改model的测试 然后是在arcgis server manager里发布此服务 由于在实际的开发中这点应用的比较多 因为在这个最最基础的环节 我会说的比较详细(一贯的风格哈~)
在讲解这个之前有个小插曲哈 就是带给大家一个比较振奋的消息 就是ESRI即将推出arcgis server 9.3.1的版本 这个是针对server9.3的一个可升级版本 估计在第二季度发布 增加了很多的人性化设置 比如 可以直接从9.3的版本升级无需卸载ArcGIS 9.3即可升级至ArcGIS 9.3.1 增强了对java的支持 加快了地图缓存速度。。。。。。。详情请大家自行了解
好了 言归正传 继续讲述GP服务的发布
数据:mxd文档(NewOrleansArea.mxd)
tbx文件(GP Models for ArcGIS Server.tbx)
关于这个model 大家可以参照此图自行建模(如下图):
(此模型的作用是通过在地图文档上点击添加一个点 然后在地图上依此点为中心 按照设置的半径做缓冲 然后对地图上的特定点层进行分析 把落在此缓冲距离内的点显示出来)
第一步:打开ArcMap 打开NewOrleansArea.mxd 注意到Shelters图层 这个就是要进行地理处理的图层 打开arctoolbox 右键添加本地model 浏览到GP Models for ArcGIS Server 添加进去 此时arctoolbox里会显示一个新toolbox 展开有个Clip Shelters With Buffer 对此右键选择编辑 此时就打开了如上图显示的界面 我们确认一下这个模型的相关设置
打开tools——options——Geoprocessing选项 确定如下图设置:
设置完毕 我们在model里右键input feature选择属性 点击数据类型选项卡 注意此处的的input parameter默认为feature set 点击ok退出
双击buffer 这里设置了缓冲半径为10miles 你也可以自行设置 点击ok退出
右键output buffers 注意manager呈选中状态
双击clip工具 注意此处的input feature为Shelters 也就是说要输出的元素在这个图层里面 默认退出
右键nearby shelters 选中属性 点击图层符号选项卡 注意一下路径即可 cancel退出
第二步 在arcmap里测试这个model并保存 在arctoolbox里双击这个model 弹出一个窗口 此时点击右边的小图标 然后可以在下方设置要缓冲的距离和单位 这么我们用默认的 然后在右边地图显示区点击一下(为了取得很好的观察效果 请在点状符号附近点击) 然后OK 这样model就开始处理这个过程了 完成后会在toc里添加一个图层 这个图层就显示了落在缓冲距离里面的点位 这里默认显示的图层为 S_Clip
好了 测试完毕 我们将S_Clip删除 然后我们在arctoolbox里吧这个model拖到toc的显示图层最上面 这时我们就可以直接保存这个文档了 其实这里的model就相当与一个工具图层了 只有保存在这个地图文档里 当你以后发布服务的时候 才可以调用它
第三步 创建mapservice与gp服务 这个过程我们在manager里完成 我们打开ArcGIS Server Manager 点击左侧的service标签 在右边点击public a gis service 浏览到要发布的地图文档 如此处的NewOrleansArea.mxd 点击下一步 这时候请注意 下面的Geoprocessing Service呈选中状态 这就说明这个地图文档是含有地理处理工具的
下一步 点击完成即可 此时在你的services列表可以看到两个发布的服务 一个是地图服务 一个地理处理服务 如果此处提示错误信息的话 请验证你的访问权限的设置还有地理处理工具图层添加到MXD没有
(二)
(接上)第四步 创建可调用此Geoprocessing Service的Web Application
点击左侧的Application标签 然后在右边点击Create Web Application
输入要创建的名字和描述信息 下一步 添加图层 浏览到NewOrleansArea即可 注意在此处选择基于Interent的接入方式 如图:
添加后 点击下一步 这一步很关键了 先添加一个Task 弹出的窗口里选择Geoprocessing 然后就要为这个地理处理添加一个现有的发布过的地理处理服务 然后点击Supporting Services 在弹出的窗口里浏览到上一步发布过的Geoprocessing Service 然后ok
在点击下面的配置(configure。。)在这里对这个服务进行相关参数的运行设置 如图:
注意上面的name与help tip 可以自行设置 下面的参数可以自行设置 这里我修改了一个Help Tip 其余默认即可
注意:如果这个配置窗口无法弹出的化 或者提示配置有错误的话 请务必检查你的这个地理处理服务的用户权限和是否添加到了地图文档中去了
然后操作就很简单了 直接下一步 最后完成即可 下图显示最后的效果:
说明:此处的处理服务已经调用过了 显示结果在Results里显示了 右边地图显示区有一个绿色的小圆点 是我刺上去的点 这个绿点附近的有三个点位内部显示了这个绿点 就是实现了点击绿点周围10 公里以内的点状图层的要素 请大家注意results上面有个Geopreccessing标签 点击即可弹出一个窗口 有个刺点的图标 点击即可在右边地图区域刺点了 然后运行即可在results里显示出结果了
好了 全文完毕 !
当然了 主要还是服务的发布 只要服务的地理处理模型构建好了 那么主要还是在server开发里用起来才有价值 还有Flex里调用此服务的时候也更加方便了 这两点应用都很有发展前途的(以后再讲) 。。。。。。。。完成收工!好困啊 觉觉去 了
首先明确一点:所有的Geoprocessing脚本都必须有output(返回值)!
理由:Geoprocessing 脚本要想在ModelBuilder中使用就必须有output,因为ModelBuilder的基本原理就是连接一个Script. tool的output和另一个Script. tool的input。
如何设置output(返回值)?