You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QGIS技术问询:基于规则的标注实现邻近点组仅显示单个标签

同类植物点组单标签实现方案

需求明确

在绿篱种植项目中,需按特定半径范围或固定邻近点数(如7个),为每组同类植物仅显示一个植物学标签,避免单点点重复标注。此前尝试aggregate工具和规则标注未达预期,可通过以下两种精准方法实现:


方法一:空间聚类+聚合图层标注(最稳定)

适合需要永久生成聚合点的场景:

  1. 空间聚类分组
    • 按半径+最小点数分组:用DBSCAN聚类工具(需安装Processing插件),设置聚类半径(如1米)和最小点数(7),输出带CLUSTER_ID字段的图层,同组同类型植物会被分配相同ID。
    • 按固定点数分组:用K-means Clustering,输入总组数(可根据总点数/7估算),同样生成聚类ID字段。
  2. 聚合聚类点
    用Dissolve工具,选择植物类型和CLUSTER_ID作为溶解字段,勾选“计算几何中心”,生成每个聚类组的中心点图层。
  3. 添加标签
    在聚合图层的标签设置中,直接绑定植物学名称字段,每个组仅显示一个标签。

方法二:原生规则标注(无需额外图层)

适合临时展示,直接在原始图层上通过表达式控制标签可见性:

  1. 按半径范围控制
    打开图层标签设置,在标签可见性中添加表达式:
    array_first(
      array_agg(
        $id,
        filter:=within($geometry, buffer(@geometry, 1)) AND "植物类型" = attribute(@parent, '植物类型')
      )
    ) = $id
    
    说明:仅让当前点1米范围内同类型点中ID最小的点显示标签,1为设定半径,植物类型替换为你的实际分类字段名。
  2. 按邻近点数控制
    用nearest_neighbor函数设置表达式:
    array_first(
      array_agg(
        $id,
        filter:=array_length(nearest_neighbor($geometry, @layer, 7, "植物类型")) = 7 AND "植物类型" = attribute(@parent, '植物类型')
      )
    ) = $id
    
    说明:仅让拥有7个同类型邻近点的组中,ID最小的点显示标签,7为设定的邻近点数。

效果对比

原始点图层现状:
输入图片描述

目标实现效果:
我的目标是为每个点组添加植物学标签

内容的提问来源于stack exchange,提问作者Regggina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:10:16