首页 GIS基础理论 QGIS标注多个字段:表达式和标注重复排查

QGIS标注多个字段:表达式和标注重复排查

作者: GIS研习社 更新时间:2026-05-17 08:42:32 分类:GIS基础理论

在做地名图、管线图、地块宗地图或巡检点位图时,QGIS标注经常需要同时显示名称、编号、类型、面积等多个字段。很多人会尝试添加多套标注规则,结果出现同一个点位上文字叠在一起、同一条道路沿线重复出现,或者空字段把版面撑得很乱。本文围绕多字段标注和重复标注两个常见问题,讲清楚表达式写法、换行控制和排查顺序。

问题背景:为什么 QGIS标注多个字段容易出错

QGIS 的标注系统本质上是对每个要素生成一段文本,再由标注引擎决定摆放位置。最稳妥的做法通常不是给同一图层开多套普通标注,而是用一个QGIS标注表达式把多个字段拼成一段完整标签。

错误最常发生在三个地方:第一,把多个字段分别做成多条规则,导致同一要素被标注多次;第二,没有处理空值,导致标签里出现多余空行或 NULL;第三,图层本身存在重复几何、重复属性或多部件要素,造成肉眼看到的重复标注。

QGIS标注表达式与QGIS标注多个字段排查示意图
示意图应展示在 QGIS 标注表达式编辑器中拼接多个字段,并按图层、规则、几何和线标注设置排查重复标注。

QGIS标注核心原则:用一个表达式生成一条完整标签

如果目标是“一个要素只显示一组文字”,应优先让一个表达式一次性输出完整标签。表达式里可以拼接字段、固定文本、换行符、条件判断和格式化结果。这样既便于维护,也能减少多条规则相互叠加造成的重复。

在 QGIS 表达式中,字段名通常用双引号引用,例如 "name";字符串用单引号引用,例如 '类型:';拼接文本可以使用 ||,也可以使用 concat()。换行常用 '\n'

判断是否写对的标准很简单:表达式预览里应该显示一段完整文本;地图上每个要素通常只由这一段文本负责标注,而不是靠多套标注互相叠加。

QGIS标注表达式:多个字段换行显示

最常见的QGIS标注多个字段需求,是第一行显示名称,第二行显示类型,第三行显示编号。可以在图层属性的标注面板中选择“单一标注”,再点击表达式按钮,输入类似下面的写法。

"name" || '\n' || "type" || '\n' || "code"

如果希望标签更像制图成品,而不是简单堆字段,可以加入固定中文前缀:

"name" || '\n' ||
'类型:' || "type" || '\n' ||
'编号:' || "code"

对点位巡检、设施管理、地块编号这类数据,这种写法已经足够实用。关键是把字段拼接逻辑集中在一个表达式中,后续修改字段顺序、增加单位或删除某一行都更清晰。

多字段标签:处理空值和数字格式

真实项目数据经常有空字段。如果直接拼接,标签可能出现空行、NULL 字样,或“类型:”后面没有内容。更稳妥的写法是使用 coalesce() 给空值一个替代文本。

coalesce("name", '未命名') || '\n' ||
'类型:' || coalesce("type", '未填写') || '\n' ||
'编号:' || coalesce("code", '无')

如果字段里包含面积、长度、人口等数值,建议在表达式中完成必要的四舍五入和单位说明。例如面图层按公顷显示面积:

coalesce("name", '未命名') || '\n' ||
'用地类型:' || coalesce("landuse", '未填写') || '\n' ||
'面积:' || round($area / 10000, 2) || ' 公顷'

这里的 $area 使用当前图层几何计算面积。若图层是经纬度坐标系,面积结果可能不适合直接作为正式统计值;实际制图前应先确认图层是否已经使用合适的投影坐标系。

QGIS标注操作步骤:从字段检查到标注预览

  1. 打开图层属性。右击目标点、线或面图层,进入属性面板,选择标注相关页面。
  2. 选择单一标注。如果只是要给每个要素生成一组文本,优先使用单一标注,而不是先创建多条规则。
  3. 进入表达式编辑器。在值或字段下拉处选择表达式按钮,先插入一个字段,确认预览能返回正确内容。
  4. 逐步拼接多个字段。先写名称,再加换行符,再加类型、编号、面积等字段。每加一段就看一次表达式预览。
  5. 处理空值。对可能为空的字段使用 coalesce(),避免标签出现 NULL 或多余空白。
  6. 设置文本样式。调整字体、字号、缓冲、背景、偏移和对齐方式,保证多行标签可读。
  7. 回到地图画布检查。缩放到实际出图比例,观察是否有遮挡、重复、空行和错位。

这套流程适合大多数QGIS标注任务。表达式不要一开始写得过长,先让一个字段正常显示,再逐段增加,出错时更容易定位。

常见坑:表达式写对了但显示异常

  • 字段名写错。表达式中的字段名必须与属性表字段完全匹配,中文字段、大小写和下划线都要核对。
  • 把字段名写成字符串。"name" 是字段,'name' 是普通文本;引号用错会导致结果固定显示字段名。
  • 数字和文本没有正确拼接。大多数情况下 || 可以完成拼接,但复杂格式建议先用表达式预览检查。
  • 换行符被写成普通字符。应使用 '\n' 作为换行,不要直接输入斜杠加 n 后又被外层文本处理成普通内容。
  • 图层坐标系不适合计算面积或长度。标注里的 $area$length 依赖几何计算,正式项目应先处理投影问题。
  • 比例尺过小导致标注拥挤。表达式没有错,但标注密度太高;应设置比例尺可见范围或适当提高优先级和避让规则。

QGIS标注重复:先分清重复来自哪里

QGIS标注重复不一定是表达式问题。表达式只负责生成文字,重复通常来自图层、规则、几何、数据或线标注参数。排查时不要马上改表达式,应先判断“同一要素被标注多次”,还是“多个要素拥有相同文本”。

现象 可能原因 优先排查
同一个点位上完全重叠两份文字 同一图层被复制显示,或规则式标注中多条规则同时命中 检查图层列表、规则式标注、图层可见性
相邻多个面显示同一个村名或地类名 多个要素属性相同,不是软件重复,而是数据粒度导致 考虑按字段融合、只标注代表要素或改用分组后的图层
一条长道路沿线多次出现同名标注 线标注开启了重复显示,或道路被分段成多条要素 检查线标注重复距离、道路分段和融合结果
一个多部件面在不同岛状区域都显示同名 多部件几何被设置为每个部分都标注 检查多部件标注设置,或拆分、融合后重新制图
导入后标签数量明显翻倍 数据源存在重复几何、重复记录或连接结果异常 检查属性表、唯一编号、重复几何和连接字段

重复排查步骤:从界面到数据逐层检查

  1. 关闭其他图层。只保留当前目标图层,确认重复文字是否还存在。若消失,说明可能是另一个相同图层或备份图层也在标注。
  2. 检查是否复制了图层。同一个数据源可能在图层面板中出现两次,样式不同但标注字段相同,地图上会看起来像重复。
  3. 检查规则式标注。如果启用了规则式标注,确认同一要素不会同时满足两条或多条规则。必要时给规则增加互斥条件。
  4. 查看线标注重复设置。道路、河流、管线等线图层可能沿线重复显示名称。若只需要显示一次,应调整重复距离、放置方式或先融合线段。
  5. 检查多部件要素。面图层中一个行政区可能由多个离散部分组成。若每个部分都显示标签,应根据出图目的决定是否关闭每个部件标注。
  6. 检查属性表重复记录。用唯一编号、名称字段和几何范围对照,确认是否有重复采集、重复导入或叠加生成的重合要素。
  7. 必要时做数据预处理。对分段道路可按道路名融合;对同村多个地块可按村名或行政代码汇总;对完全重复几何可使用去重工具清理。

如果你看到的是多个地块都叫同一个村名,这不一定是错误,而是数据本来有多个要素共享同一属性。解决思路不是继续调表达式,而是决定制图层级:标注地块、标注村界,还是先汇总出一个代表性面。

方法比较:QGIS标注字段、表达式、虚拟字段和预处理

方法 适合场景 局限
直接选择单个字段 只显示名称、编号等一个字段 不能灵活处理多个字段、单位、空值和换行
使用标注表达式 需要把名称、类型、编号、面积等拼成一组标签 表达式过长时维护成本上升,应分段测试
创建虚拟字段 多个地图或多个项目都要复用同一套标签文本 仍要注意字段依赖、空值和数据更新
规则式标注 不同类别要用不同字体、颜色、比例尺或字段组合 规则条件不互斥时容易造成重复标注
数据融合或汇总 多个要素共享同一名称,只希望在汇总区域标一次 会改变制图数据粒度,应保留原始图层备份

实用检查清单:发布地图前逐项确认

  • 主标注是否由一个表达式生成,而不是多套普通标注叠加。
  • 表达式预览是否正常,字段名、引号、换行符和空值处理是否正确。
  • 每个字段是否确实适合出现在标签中,避免把内部编号或冗余字段放进正式地图。
  • 地图上是否有相同数据源的重复图层同时打开。
  • 规则式标注中的条件是否互斥,同一要素是否可能命中多条规则。
  • 线图层是否因为重复距离设置或分段数据导致同名多次出现。
  • 面图层是否因为多部件几何、多个相同属性地块或汇总层级不对而重复显示。
  • 最终出图比例尺下,标签是否清楚、不过密、不遮挡关键地物。

FAQ:多字段标注和重复排查

QGIS标注多个字段应该用多个标注规则吗?

一般不建议。若只是想让一个要素显示名称、类型、编号等内容,使用一个表达式拼接多个字段更稳定。多条规则更适合不同类别使用不同样式,而不是简单叠加字段。

QGIS标注表达式怎么换行?

常用写法是在字段之间加入 '\n',例如 "name" || '\n' || "code"。如果换行没有生效,先检查表达式预览,再确认是否把字段名和字符串引号写反。

QGIS标注重复一定是软件问题吗?

不一定。重复标注常见原因包括图层复制、规则同时命中、线标注重复显示、多部件几何、重复记录和多个要素共享同一名称。先定位来源,再决定是改标注设置还是清理数据。

同一个村名在多个地块上都显示,怎么只显示一次?

这通常是数据粒度问题。可以按村名或行政代码先融合成村级面,再对融合后的图层标注;也可以保留地块图层用于边界显示,另建一个汇总图层专门负责标签。

线图层的道路名称为什么沿线出现很多次?

道路可能被切成多段,也可能开启了沿线重复标注。先检查线标注的重复距离和放置设置,再看属性表中同一条道路是否被分成多个要素。正式出图时,按道路名融合后再标注往往更干净。

总结

QGIS标注的关键不是把所有字段都堆到地图上,而是用清晰的表达式生成一条可读、稳定、可维护的标签。做多字段标注时,优先使用单一标注加表达式,处理好换行、空值、数字格式和单位。

遇到重复标注时,先分清是表达式重复、规则重复、图层重复,还是数据本身重复。按图层列表、规则式标注、线重复设置、多部件几何、属性表和数据预处理逐项检查,通常能快速定位问题。把这套流程固定下来,QGIS 的标注会更适合正式制图、成果汇报和后续地图服务发布。

相关文章