QGIS技术问询:基于规则的标注实现邻近点组仅显示单个标签
同类植物点组单标签实现方案
需求明确
在绿篱种植项目中,需按特定半径范围或固定邻近点数(如7个),为每组同类植物仅显示一个植物学标签,避免单点点重复标注。此前尝试aggregate工具和规则标注未达预期,可通过以下两种精准方法实现:
方法一:空间聚类+聚合图层标注(最稳定)
适合需要永久生成聚合点的场景:
- 空间聚类分组
- 按半径+最小点数分组:用
DBSCAN聚类工具(需安装Processing插件),设置聚类半径(如1米)和最小点数(7),输出带CLUSTER_ID字段的图层,同组同类型植物会被分配相同ID。 - 按固定点数分组:用
K-means Clustering,输入总组数(可根据总点数/7估算),同样生成聚类ID字段。
- 按半径+最小点数分组:用
- 聚合聚类点
用Dissolve工具,选择植物类型和CLUSTER_ID作为溶解字段,勾选“计算几何中心”,生成每个聚类组的中心点图层。 - 添加标签
在聚合图层的标签设置中,直接绑定植物学名称字段,每个组仅显示一个标签。
方法二:原生规则标注(无需额外图层)
适合临时展示,直接在原始图层上通过表达式控制标签可见性:
- 按半径范围控制
打开图层标签设置,在标签可见性中添加表达式:
说明:仅让当前点1米范围内同类型点中ID最小的点显示标签,array_first( array_agg( $id, filter:=within($geometry, buffer(@geometry, 1)) AND "植物类型" = attribute(@parent, '植物类型') ) ) = $id1为设定半径,植物类型替换为你的实际分类字段名。 - 按邻近点数控制
用nearest_neighbor函数设置表达式:
说明:仅让拥有7个同类型邻近点的组中,ID最小的点显示标签,array_first( array_agg( $id, filter:=array_length(nearest_neighbor($geometry, @layer, 7, "植物类型")) = 7 AND "植物类型" = attribute(@parent, '植物类型') ) ) = $id7为设定的邻近点数。
效果对比
原始点图层现状:
目标实现效果:
内容的提问来源于stack exchange,提问作者Regggina
相关产品推荐
相关产品推荐

