QGIS环境下编写SQL统计落入表B正方形区域的表A点要素数量
QGIS 空间点面统计SQL方案
预设表与字段对应关系(可根据你的实际数据修改):
- 点表(表A):
Samples,几何字段默认名为geometry,唯一标识字段为Station_ID - 地块表(表B):此处假设表名为
blocks,地块编号字段为TENURE_NUM,几何字段默认名为geometry
你可以在QGIS顶部菜单栏的「数据库」-「DB管理器」-「Virtual Layers」中执行以下SQL语句:
SELECT b."TENURE_NUM", COUNT(a."Station_ID") AS point_count FROM blocks b LEFT JOIN Samples a ON ST_Contains(b.geometry, a.geometry) GROUP BY b."TENURE_NUM"
逻辑说明
- 用
LEFT JOIN关联两张表:可保留所有地块表的记录,即便该地块没有匹配到任何点 ST_Contains(b.geometry, a.geometry)是空间判断函数:仅当点完全落在地块范围内时返回匹配成功- 统计用
COUNT(a."Station_ID")而非COUNT(*):未匹配到点的地块关联到的点表字段为NULL,COUNT统计NULL时会返回0,正好满足无点落入计数为0的需求 - 最后通过
GROUP BY b."TENURE_NUM"按地块编号分组,完成每个地块的单独统计
执行后勾选「加载为新图层」即可将统计结果导入QGIS工程,也可直接导出为独立表格。如果你的图层几何字段名不是默认的geometry,可打开对应图层属性的「源」标签页,查看实际几何字段名后替换即可。
内容的提问来源于stack exchange,提问作者Raboush2
相关产品推荐
相关产品推荐

