背景

最近碰到一个有意思的GIS功能需求:有一份小区的面图层,在地图上点一下,找出距离最近的小区面。

为什么说是有意思呢?如果大家仔细回想下,就会发现,很多时候,我们通过点击地图上的一个目标跟地图进行交互,目的是要看一下我们所点的这个目标的信息。譬如我们在地图上点一个餐馆的图标,想看看它是做什么菜系的,评论好不好,等等。这个点击动作其实是很明确的,就是奔着看餐馆的信息去。

而相对而言,上面的这个需求所带出来的就是另一类诉求了。找出距离最近的小区,或者说找出最近的目标,这其实是懒人的一种需要。譬如说,我肚子饿了,帮我找出里我最近的餐馆,甭管是西餐还是中餐,粤菜、湘菜、川菜还是海南粉,都可以,只要能填饱肚子(温饱问题没解决,让国家领导人操心了~)。

那这个需求能不能实现?答案是肯定的,怎么实现?

实现思路

好了,坑已经挖好了,现在开始填坑。在填坑之前,需要补充的是,咨询这个问题的朋友用的是ArcGIS API for JavaScript来开发的业务系统。所以他最初的问题是:JS API有没有提供接口直接实现这个功能?

去过了一遍JS API,没发现有这个接口可以直接实现?那有没有其他的方式可以很方便的就实现?当时第一个念头想到的解决方案是:建模+发布GP服+JS API调用。那除了这种还有没有其他的方法?答案是肯定的,譬如SOE,又或者直接通过ST_Geometry。但是对于懒人来说,本着【能少写些代码就少写些代码】的精神,还是选择了初衷。

那这里我主要是重点把建模这个过程解释一下,至于发布成GP服务和利用JS API调用,大家百度一下就可以了,很多文章介绍。好,先把模型图放上来:

这个模型当然是用ArcGIS 桌面的模型构建器实现的。模型构建器是一个用来创建、编辑和管理模型的应用程序,而模型是将一系列地理处理工具串联在一起的工作流,它将其中一个工具的输出作为另一个工具的输入。也可以将模型构建器看成是用于构建工作流的可视化编程语言。

  1. 首先创建一个变量【inputpoint】,接收点击地图后返回的点要素,这个变量类型是要素集;
  2. 将inputpoint通过工具【Make Feature Layer】转换成图层,为什么要转换成图层?因为工具【Near】的输入要求是图层,输出的结果名为point的图层;

  3. 然后再用【Near】工具进行邻近要素分析。这个工具的说明如下:

    我们把point图层当做输入要素,把小区面region图层作为邻近要素。

    注意:到这一步执行完了以后,你可能认为,已经实现了最近小区面的功能。但是,其实咱们是错了,刚开始我也是这么认为,但是一看这个工具的帮助,No way。返回的结果是我们所输入的点要素,同时还附加了其他的字段,包括:最近的要素对象 ID、输入要素与邻近要素之间的距离。所以我们还得往下走。但至少我们已经知道了最近的这个要素的OBJECTID,这就好办了。本来到这一步其实也可以完成了,因为拿到这个OBJECTID值之后,在前端就可以通过API来查询这个小区面。但是呢,本着"一条龙服务"的念头,还是希望能一次性解决的好。

    图-临近分析的上半场

  4. 知道了对象的ID,那接下来就需要去找对象了。首先,我们需要一个工具把对象ID拿出来,然后再用找对象工具来找对象:

    图-把对象ID拿出来

    把对象ID拿出来我用工具【Get Field Value】,顾名思义就是获取字段的值。

    图- Get Field Value

    这个工具必须要点赞的一点是,它只获取第一行的值,这正是我们需要的。

    图-找对象工具【Select】

    找对象工具我们用【Select】,根据对象的OBJECTID去选择:

    图-Select工具界面

    那怎么把对象ID和Select给串联起来呢?答案在变量Expression,如下图:

    看到这个表达式就很清晰了吧?OBJECTID=%NearRegionOID%

    注意,表达式里如果要引用其他的变量需要在变量的前后加入符号%,这是硬性要求,没得谈!

  5. 剩下的就是把输入和输出作为模型参数:

    做这一步的目的是发布成GP服务时,我们需要接收前端传过来的点坐标,并返回分析后的最近小区面要素。

    到这里,建模的部分就已经完成了,我们可以先在ArcMap中测试下:

    图-在地图上打一个点

    图-找到对象的结果

    当然,如果你想要发布成GP服务的话,那就打开【结果】窗口,如下图:

    图-打开地理处理分析结果窗口

    展开当前会话,找到刚刚分析完成的结果,右键点击之后选择【共享为】à【地理处理服务】,如下图:

    图-将地理处理的分析结果发布成GP服务(地理处理服务)

    点击之后就会出现一个很熟悉的界面,发布服务:

    剩下的就跟发布普通的Map Server服务差不多了,就不再展开了。最后上一张发布好的GP服务界面:

    具体的开发可以参考以下链接:

    GP服务REST API接口说明:

    http://resources.arcgis.com/en/help/arcgis-rest-api/#/GP_Service/02r3000000rq000000/

    JavaScript API关于Geoprocessor接口说明:

    https://developers.arcgis.com/javascript/3/jsapi/geoprocessor-amd.html

    API调用GP服务Demo:

    https://developers.arcgis.com/javascript/3/jssamples/util_relation.html、

    这个Demo演示的是在地图上点击一个位置,然后调用GP服务分析出 3分钟车程内的披萨餐厅。

临近小区分析-利用ArcGIS构建分析模型相关推荐

  1. ArcGIS API For JS之网络分析(临近设施分析)

    ArcGIS 提供两种网络分析,即基于Geometric Network的有向网络或者设施网络和基于Network Dataset的无向网络,在这里网络的分析指后者,ArcGIS api支持网络分析中 ...

  2. 利用ArcGIS模型构建器实现批量投影栅格

    利用ArcGIS模型构建器实现批量投影栅格 1.构建模型(以投影栅格为例) 在工具条中点击ModelBuilder 2.编写模型(以投影栅格为例) 点击"Insert插入-Iterators ...

  3. 利用GAT(图论分析工具箱)构建并分析大脑结构协变网络学习笔记

    前言 前面我学习了利用DTI构建白质纤维脑网络,并采用GRETNA计算了小世界网络属性.阅读文献发现可以利用灰质体积或皮层指标(皮层厚度.折叠指数.沟深)等构建结构协变网络再进行网络拓扑属性的计算.因 ...

  4. 灰色关联分析_灰色关联分析模型研究综述

    灰色关联分析模型研究小结 1 引言 灰色关联分析是灰色系统理论中十分活跃的一个分支, 其基本思想是根据序列曲线几何形状来判断不同序列之间的联系是否紧密. 基本思路是通过线性插值的方法将系统因素的离散行 ...

  5. 利用Arcgis制作图像分割数据集

    利用Arcgis制作图像分割数据集,以制作农村道路标签数据进行二分类为例 一,进行矢量化获取矢量数据 二,制作掩膜 三,mask图像导出 四,原始遥感影像裁剪 五,mask图片和遥感图像裁剪及训练集. ...

  6. 利用Arcgis Engine 二次开发的使用和总结

    Arcgis Engine 初体验 先放一张第一版系统的图,由于公司机密不能提供源码,但是各个小功能提供源码,为需要的同仁提供些许帮助. 接下来进入正题,将逐一展示利用Arcgis Engine开发的 ...

  7. 如何利用有限的数据发表更多的SCI论文?——利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响

    SCI的写作和发表是科研人提升自身实力和实现自己价值的必要途径."如何利用有限的数据发表更多的SCI论文?"是我们需要解决的关键问题.软件应用只是过程和手段,理解事件之间的内在逻辑 ...

  8. 如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等?

    如何利用ArcGIS实现电子地图可视化表达?如何利用ArcGIS分析空间数据?如何利用ArcGIS提升SCI论文的层次?制图是地理数据展现的直观形式,也是地理数据应用的必要基础 本文从ArcGIS的基 ...

  9. 【转载】利用ArcGIS Engine 二次开发的使用和总结

    文章目录 ArcGIS Engine 初体验 一.较完全编辑功能GIS程序 二.字段搜索要素和空间搜索要素GIS程序 三.图层重叠搜索GIS程序 四.要素合并.裁剪及检测要素重叠GIS程序 五.自定义 ...

最新文章

  1. 2022-2028年中国渣油行业市场研究及前瞻分析报告
  2. PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)
  3. Python收发邮件
  4. 直接获取submission结果
  5. 10实用的JS实用技巧
  6. 1777:文件结构“图”
  7. leetcode 1005. K 次取反后最大化的数组和 思考分析
  8. python图像几何变换_Python 图像处理 OpenCV (5):图像的几何变换
  9. python新手入门代码-Python 新手入门习题及代码
  10. acs880变频器静态辨识_ACS880变频器PID控制参数设置 -
  11. C语言开发《浪漫流星雨》表白程序,去年已经成功了
  12. 魔兽地图编辑器插件YDWE的使用与基本设置4 物体编辑器、启动游戏测试、查找物品
  13. SIP入门(一):建立SIP软电话环境
  14. 开源Golang rtmp服务lalserver支持多种鉴权防盗链方式
  15. mysqldb python.zip_python MySQLdb
  16. php如何删除文件夹里的图片,php如何删除文件夹
  17. 参会指南 · 2018中国软件生态大会西安站
  18. 基于python的scip库使用,从基础模型到复杂模型,从一维变量到三维变量
  19. 高精度气体压力控制中TESCOM ER5000及其配套背压阀的国产化替代案例分析
  20. 深度卷积神经网络是什么,计算机神经网络是什么

热门文章

  1. 调用腾讯云OCR接口识别身份证和户口本
  2. 【模型剪枝】|Learning Efficient Convolutional Networks through Network Slimming
  3. m7y30处理器跑linux,vivoY30采用什么处理器-处理器性能如何
  4. 服务器trunk协议是什么,TRUNK端口汇聚技术原理和作用介绍
  5. 《C语言》爱心代码,送给心爱之人
  6. 有苦有乐的算法 --- 可能有环也可能无环的两个单链表,判断这两个链表是否相交,如果相交返回相交的第一个节点
  7. AXI latency 理解
  8. 解决SVN或eclipse安装SVN插件失败问题
  9. 【jzoj4763】【旷野大计算】【莫队】
  10. 这10款数据可视化软件工具免费好用