让模型与数据分离,更简单的使用GP服务:空间关联。

背景

最近遇到一个需求:需要了解每个经营网格(面图层)中包含了多少个营业网点(点图层)。在GIS来说,这是一个很基本的需求,实现的方式也很多。这里的情况是B/S架构的系统,所以,我们可以直接在SQL层面使用ST_Geometry函数来实现,还可以在前端使用ArcGIS JavaScript API的空间查询来实现。前一种方式,需要写服务端代码,费劲,所以不考虑;后一种需要先查询到网格图层的数据,再和经营网点进行空间查询,网格数多的话,需要进行多次空间查询,效果不高,所以也不考虑。
既要省时又要效率高,那就不妨试试GP服务!

实现思路

ArcGIS里面提供了空间关联的工具,具体路径在:
让模型与数据分离,更简单的使用GP服务:空间关联。
这个工具接受两个参数:一个是目标图层、一个是关联图层。在我们的需求里面,目标图层是网格图层、关联古城是营业网点图层。利用这个工具,我们再使用Model Builder工具构建了一个模型,具体如下图:
让模型与数据分离,更简单的使用GP服务:空间关联。
利用这个模型我们再发布成GP服务,如下图所示:
让模型与数据分离,更简单的使用GP服务:空间关联。
需要注意的是,这个GP服务的两个输入参数,它们的数据类型是GPFeatureRecordSetLayer,这种类型很有意思,它可以支持输入要素集(JSON格式),如下图:
让模型与数据分离,更简单的使用GP服务:空间关联。还可以支持要素图层URL的方式,如下图:
让模型与数据分离,更简单的使用GP服务:空间关联。
这就意味着我们可以把网格图层和营业网点图层发布成地图服务,在分析的时候只需要把数据源的地址告诉这个GP服务,剩下的就是获取结果:
让模型与数据分离,更简单的使用GP服务:空间关联。
让模型与数据分离,更简单的使用GP服务:空间关联。

延伸思考

GP服务接受图层URL地址,对于大数据量这种场景来说非常的方便,客户端不需要再和地图服务打交道,同时,模型和数据互相分离也可以满足不同图层之间的空间关联。