GeoServer中如何通过WFS/WPS请求统计各多边形内的点数量
GeoServer逐多边形统计范围内点总数实现方法
原有调用问题说明
vec:InclusionFeatureCollection进程的核心作用是空间筛选:返回所有落在第二个输入要素集合范围内的第一个输入集合的要素,本身不具备分组聚合能力,因此无法输出每个多边形对应的点计数,只能返回符合空间包含关系的点要素结果,和目标需求不匹配。
可选实现方案
方案1:PostGIS SQL视图(性能最优,最稳定)
如果数据源为PostGIS,直接创建SQL视图完成统计,发布为WFS图层即可直接调用,输出结构和QGIS点在多边形内统计结果完全一致:
SELECT poly.*, COUNT(pt.id) AS point_count FROM osm.administrative_4 poly LEFT JOIN osm.events pt ON ST_Contains(poly.geom, pt.geom) GROUP BY poly.id
- 视图会保留多边形图层的所有原始属性,新增
point_count字段存储对应多边形范围内的点要素总数 - 直接请求该视图对应的WFS图层即可获取结果,无需额外编写WPS请求逻辑
方案2:调用专用WPS进程
GeoServer 2.15及以上版本自带vec:CountInPolygon进程,专门用于逐多边形统计内部点数量,可直接替换原有请求中的进程ID和参数映射,示例请求如下:
<wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"> <ows:Identifier>vec:CountInPolygon</ows:Identifier> <wps:DataInputs> <wps:Input> <ows:Identifier>polygons</ows:Identifier> <wps:Reference mimeType="text/xml; subtype=wfs-collection/1.0" xlink:href="http://geoserver/wfs" method="POST"> <wps:Body> <wfs:GetFeature service="WFS" version="1.0.0" outputFormat="GML2"> <wfs:Query typeName="osm:administrative_4"/> </wfs:GetFeature> </wps:Body> </wps:Reference> </wps:Input> <wps:Input> <ows:Identifier>points</ows:Identifier> <wps:Reference mimeType="text/xml; subtype=wfs-collection/1.0" xlink:href="http://geoserver/wfs" method="POST"> <wps:Body> <wfs:GetFeature service="WFS" version="1.0.0" outputFormat="GML2"> <wfs:Query typeName="osm:events"/> </wfs:GetFeature> </wps:Body> </wps:Reference> </wps:Input> </wps:DataInputs> <wps:ResponseForm> <wps:RawDataOutput mimeType="text/xml; subtype=wfs-collection/1.0"> <ows:Identifier>result</ows:Identifier> </wps:RawDataOutput> </wps:ResponseForm> </wps:Execute>
注意:该进程返回的结果为多边形要素集合,保留多边形原始属性的同时新增count字段存储对应点计数。
方案3:WFS 2.0空间连接聚合
如果部署环境支持WFS 2.0标准,可直接通过GetFeature请求携带空间连接算子和聚合函数完成统计,无需依赖WPS扩展。
内容的提问来源于stack exchange,提问作者mehdi kamani
相关产品推荐
相关产品推荐

