☰
QGIS标签选项卡详解:从字段标注到避让与条件控制
2026/10/3 3:36:36 网站建设 项目流程

1. 揭开标签选项卡的面纱:为什么它比“手动加字”靠谱

刚开始接触QGIS的朋友,十有八九都干过这种事:辛辛苦苦把点、线、面画好了,想给每个要素标个名称,结果打开图层属性找了一圈,要么没找到“标签”在哪,要么找到了不会配,最后干脆用“文本工具”一个个手动往地图上戳字。如果你也这样干过,我劝你趁早停手——手工加文本看着灵活,实际上是一场看不到尽头的噩梦:图层一刷新文本就乱跑、比例尺一缩字全挤成一团、想换个字体得把所有文本重新点一遍,最惨的是导出地图时漏了几个字,返工返到怀疑人生。

QGIS的“标签选项卡”解决的就是这个问题。它在图层属性对话框里,是做地图标注的核心入口。别小看这个选项卡,表面上看不就是“选个字段、摆个位置、调个样式”嘛,真要把它用明白,至少能帮你解决三类事:第一,把字段值自动变成图上的文字,一劳永逸;第二,让标注在缩放、平移、叠加图层时自动避让、自动取舍,地图永远干净清爽;第三,通过表达式和规则实现复杂标注,比如按属性分颜色显示、只标某类要素、标注里带上多个字段拼接出来的说明文字。

这篇文章适合三种人看:刚装好QGIS、打开属性对话框找不到北的纯新手;已经会用“单一标注”但觉得标签效果不够专业的制图用户;以及每次标注都有特殊需求、想搞懂标签底层逻辑的高级用户。我会把标签选项卡里每个参数的作用讲透,然后拿一个实际项目从头到尾配一遍,最后把社区里高频出现的问题单独整理出来,照着排查就行。

2. 标签选项卡里到底藏了些什么

老规矩,先搞清楚界面。在图层上右键,打开图层属性,左边一堆选项卡里找到“标签”(有的汉化版本叫“标注”)。点进去之后,最显眼的是一个下拉框,默认是“无标签”。你要做的第一件事,就是在下拉框里选择一种标注类型。QGIS 3.x内置了五种主要类型:单一标签、基于规则的标签、基于遮挡的标签、阻塞、以及“无标签”。另外还可以选择“单一标签(替换属性设置)”“基于规则的标签(替换属性设置)”等,那是数据定义覆盖的变体,先放一边。

选好类型后,下面出现一串子面板,默认会停在“文本”这一项。左侧层级列表里还有格式化、缓冲、阴影、背景、放置、渲染等子项。这些子项不是一个开关那么简单,它们之间是有顺序和依赖关系的:先确定“标什么”(文本内容),再决定“长什么样”(格式、缓冲、阴影、背景),最后安排“摆哪里、什么时候显示”(放置、渲染)。用Photoshop的人应该秒懂,标签绘制本质上也有一套图层栈:背景在最底下,然后是文本本身,文本外面套缓冲,缓冲外面再挂阴影。你在面板里调的每一项,都是在往这个栈上叠东西。

我对新手有个建议:别一上来把所有面板都开满。很多毛病——标注压在一起、图面花里胡哨、导出后模糊——都是因为一次性开的特效太多。先只用“文本+放置+渲染”三个面板跑通流程,再把缓冲和背景加进来。前面跑通了,后面出问题你也能定位到是哪一层出了问题。

3. 核心面板逐个拆解:每一项参数背后的逻辑

3.1 文本面板:不仅是个输入框

“文本”面板解决的是“标什么”。你可以在下方选择字段或者写表达式。直接选字段最简单,比如选“名称”字段,地图上每个要素就显示各自的名称。但实际项目里,更多时候需要的是表达式拼接效果,比如“道路编号+路名+长度”同时出现在一个标注里,或者把面积换算成公顷再保留一位小数。

表达式按钮在字段下拉框最右侧,长得像“ε”或者文本框图标。点开后进入表达式对话框,这里面能用的函数非常多,常见组合有:

  • 拼接文本:"县名" || ' ' || "村名"
  • 数值格式化:format_number("Area", 1)表示保留一位小数
  • 条件判断:CASE WHEN "等级" = 1 THEN '高速' ELSE '普通' END
  • 里程统计:round($length / 1000, 2) || ' km',这个在给KML路线做里程标注的时候非常常用

文本面板里还有字号、字体、颜色、透明度、行高、字间距、字重等选项。有一个特别注意:字号默认单位是“毫米/pt”,如果你想让标注随着地图缩放而缩放,要留意地图单位的设置;如果固定用毫米,打印出图时字的大小不变,屏幕浏览时也不变,这在出图场景下是最稳的。我做的专题图基本都用固定字号,让成图风格统一。

“文本”面板底部有个“坐标X”和“坐标Y”的选项,这是做动态坐标标注用的,比如标注要素中心的经纬度,勾选后可以用表达式生成“东经xxx度,北纬xxx度”这种格式。

3.2 格式化面板:数字显示的精修台

格式化面板是用来控制数值型字段在标注里怎么呈现的。入口在文本下方的子项列表里的“格式化”。里面可以针对标签中的数值触发器做设置,比如数字位数、千位分隔符、小数点。如果你标注的是人口、产值这种大数值,千位分隔符会让图面一下专业很多。

还有一个容易被忽略的“自定义格式”,支持写格式字符串。举例来说,如果你要标注成百分比,可以在自定义格式里写0.0%,数值0.235就会显示成“23.5%”;要做分数形式可以配合字段计算先算出分子分母再拼接。这部分建议去表达式里拼,格式化面板更适合做单一数值字段的美化。

3.3 缓冲、阴影、背景:让标注在底图上“跳出来”

缓冲(Buffer)是给文字外侧描一圈边。这项我很推荐至少开一个浅色细缓冲,尤其是影像底图或者地形图,没有缓冲的话,标注文字和底色糊在一起是家常便饭。缓冲面板能调颜色、透明度、宽度,建议宽度先不超1毫米,颜色选白色或浅色(浅黄也很好用)。注意有个选项叫“绘制缓冲区在文字下方”,默认勾选,这个顺序是对的——先有底色,再写文字,文字不会糊成一团。

阴影(Shadow)默认是关闭的,它给标注文字投射深色影子,增加立体感,不过地图要素多的时候慎用,会显得脏。如果你确实要做“立体字”效果,阴影偏移设成偏移X=0.5、Y=-0.5,模糊半径设为0,颜色用灰色半透明,效果比较干净。

背景(Background)就更实用了,把标注放在一个矩形、圆角矩形或椭圆里。很多规划图里的村名、地块编号就是用这个做的:背景颜色设为半透明白,边框设成红色或黑色,文字区域立刻突出。背景形状里有个“半径X/Y”,用来调圆角大小,做个“圆角标签”,比直角框好看得多。背景和缓冲不要同时开太满,否则一个标注又描边又填充又投影,图上就剩一堆框了。

3.4 放置面板:标注摆哪里的规则引擎

放置面板解决的是“标注放哪、能不能放得下”这个核心问题。点图层、线图层、面图层在这个面板里显示的参数不太一样:

  • 点图层:有象限(文字在点的哪个方位)、偏移量、以及“优先位置顺序”。
  • 线图层:标注可以沿线的角度放置,也可以水平放置,还能指定角度计算方式。
  • 面图层:可以放在面中心,也可以放在面内部某个象限。

新手最容易忽略的是“重复”选项。对线图层来说,默认每个要素只标一次,但一条很长的道路只用标一次完全没问题;如果你希望每隔一段距离重复标一次路名,就开启重复,并设置距离。对面多边形,如果图斑很大,只标一次确实显得空旷,也可以开启重复。

还有“定位”和“允许覆盖”这个隐藏逻辑:在自动放置模式下,QGIS会根据数据密度自动找位置,但有时候自动位置并不符合我们制图员的习惯。这时可以勾选“数据定义”,使用一个“允许位置”的字段,逐要素地指定标注放在左上还是右下。我做过一个地籍图项目,特殊地块标注的位置就是靠这个字段控制的,虽然前期整理数据麻烦,后期效果非常好。

3.5 渲染面板:控制冲突与可见性

渲染面板是标签控制的最后一关,也是最精髓的一项。最上面的“标签冲突解决”是整个标注引擎的避让开关。默认是“始终允许”,意思是所有标注都能显示,但彼此之间会自动挤位置;如果你选“允许标注互相重叠”,标注就会堆在一起,除非你真的需要每个标注都显示、不管好看不好看,否则别选这个。

再往下有个“要素限制”选项,它管的是“一个要素可以有几个标注”。默认每个要素最多一个标注,某些场景下(比如一条河流横跨整张图,只在中间标一次河名就够了)一般不用动。“显示所有标签的一部分”这项不用管,它是针对跨图幅要素的特殊切分显示。

“比例尺范围”非常重要。设置最小和最大比例尺,可以控制标注只在特定缩放级别下显示。比如大区域行政图上,你不想让自然村的标注全冒出来,只需要设置最小比例尺为1:100000,小于这个级别就不显示了。这个功能在处理多级图层时能帮你省掉大量制图工作量。

“优先级”是控制不同图层标注谁先占位置的。值越高的标注越优先显示。比如你将重要道路的优先级设为10,一般道路设为2,当地图装不下所有标注时,重要道路标注优先保,一般道路标注会自动让位。优先级配合“比例尺范围”是最常用的两个避让控制手段。

4. 一次完整实操:从普通标注到分式标注和条件控制

先起一个场景:假设我手上有一个村庄点图层和一个道路线图层,要出一张村组分布示意图,需要做到这几件事:村子标注显示“村名+人口数”,人口超过1000的用醒目标注,道路标注要避免重叠,另外再加一个特殊要求——有些图斑需要做“分式标注”(分子分母上下排列)。

第一步,先做村子的常规标注。打开图层属性,切到“标签”,下拉框选“单一标签”。在文本子面板里,字段下拉点表达式,输入:

"村名" || '\n' || format_number("人口", 0) || '人'

\n是换行符,也就是一个标注里显示两行。字号的单位选“毫米”,我这里设成3.0。颜色设深棕色,透明度为0。

第二步,处理标注显示层级。在渲染面板里,把优先级调成8,并勾选“仅显示当前比例尺内的标注”,设置最大比例尺1:50000,最小比例尺1:500000。这样一个范围之外,村子标注自动隐藏。再在“放置”面板里选“围绕点”模式,把8个象限位置全部勾上,让QGIS自动决定文字放哪个方向最合适。

第三步,配置缓冲。缓冲面板勾选“绘制缓冲区”,宽度设成1.0毫米,颜色白色,不透明度100%。这里要注意:缓冲宽度别用1.5毫米以上,不然两个相近要素的标注缓冲会互相连成一片,图面上出现大块白斑,很难看。

第四步,做条件控制。回到标签下拉框,把类型改成“基于规则的标签”。这时会出现一个“过滤表达式”的设置。我把人口数大于1000的村另设一条规则,文字用红色、加粗,字号4毫米,并在表达式里拼接一个“(大)”的标记:

"村名" || '\n' || format_number("人口", 0) || '人(大)'

过滤器写法是"人口" > 1000。然后再新建一条规则,把其他村子用默认样式标出来。这样做的好处是:不需要新建图层、不需要复制数据,纯粹靠规则就把标注样式分成两类。规则面板里可以直接拖拽规则的显示顺序,优先用大村标注。

第五步,处理道路线的标注避让。打开道路图层的标签,选择“单一标签”,文本内容是“路名”。重点是放置面板,“线”类型下选择“平行”,距离设0.5毫米,角度用“水平”模式。渲染面板里把“允许标注互相重叠”取消,优先级设6。这时候道路标注会自动沿线放置,并且不会压到彼此的文本。

第六步,做分式标注。分式标注在制图里常用于图斑编号,格式是分子在上一横线或斜线在下。QGIS没有一键分式按钮,但有一个可靠的自定义做法:利用表达式把分子和分母拼成多行,再在“格式化”面板中开启“多行对齐”。具体来说,分子用字段"编号",分母用字段"面积",表达式写成:

"编号" || '\n' || '————' || '\n' || format_number("面积", 1)

这是最直观的替代方案,效果就是上下两行中间加一条横线,视觉上接近分式。如果不能用横线,常见做法是用斜杠拼接:"编号" || ' / ' || format_number("面积", 1)。注意多行对齐要选择“居中”,如果默认左对齐,分式看起来会很歪。不同版本QGIS的多行对齐选项位置略有差异,但都在“格式化”面板里。

第七步,也是容易忽略的一步——图面预览。点击对话框左下角的“应用”,先别关属性窗口,直接把地图缩放到实际出图比例尺,检查有没有文字重叠、有没有漏标、缓冲够不够。这一步很关键,很多人在属性框里调了半天,应用之后一缩放,标注全乱套了,就是因为“实际渲染状态”和“预览状态”不一样。检查没问题了再点“确定”关对话框。

做完这七步,一张带有分级标注、道路避让、分式编号的示意图基本就成了。整个过程不用新建任何辅助图层,全在图层面板里完成,后续想改样式,也只需要再去标签选项卡里修改对应参数。

5. 社区高频问题排查与避坑笔记

标签功能用多了,总会遇到一些“网上搜了半天也说不清”的问题。我整理几个高频的,这些都是我在项目里真实踩过的坑。

现象常见原因解决办法
明明选了字段,地图上一个标都没有图层比例尺范围设置不对,“要素限制”卡住了渲染面板里检查最小/最大比例尺,把“自动”打开
标注全是乱码方块字段是中文但字体不支持中文文本面板里把字体切换成“微软雅黑”“思源黑体”等中文友好字体
两个标注叠在一起,怎么调都让不开渲染面板勾选了“允许标注互相重叠”取消该选项,打开“标签冲突解决”
导出PDF后标注模糊或漂移用了背景/阴影且导出分辨率不够导出时提高分辨率,把背景和阴影渲染关闭后对比测试
线图层标注只显示一个,想沿着路线重复标未开启重复选项放置面板里开启“重复”,并设置合理的重复距离
标注位置完全不受控制,每次刷新都变自动放置模式下象限冲突,触发避让在数据属性里设置“允许位置”字段,逐要素指定位置

5.1 标注不显示,先查比例尺和遮挡,别急着重装

很多新手遇到标注不显示,第一反应是去重装软件或者怀疑数据坏了。实际上80%的情况出在两个地方:一是渲染面板的比例尺范围,默认最小比例尺是0、最大比例尺是空,本来应该是全范围显示,但如果你上一次编辑时不慎改过,或从模板里复制的图层样式带了限制,那当前比例尺下就会静默隐藏。二是“标签冲突解决”的判定逻辑:当一个区域内要素过密,优先级低的标注会被引擎主动舍掉。这种舍掉在界面上的体现就是“没有任何标注”,不是软件出错了。

我通常的处理流程:先切到“基于规则的标签”,写一个true的过滤器,把所有规则暂时清空重来;如果这都不显示,那就是比例尺卡住了。排查顺序永远是:比例尺范围 > 冲突解决 > 字段内容是否为空 > 字体是否支持。

5.2 分式标注的替代方案和版本差异

QGIS 3.28之后,“格式化”面板里的“多行对齐”行为有调整,早期版本的对齐只影响文本自身,不影响背景框。如果你在旧版本里做分式标注,建议先在预览区域缩放几次,确认线条位置。此外,富文本方案也能做分式:在“文本”面板里勾选“允许HTML格式化”,然后使用<span style="text-decoration:overline">分子</span>配合分隔符,但富文本模式下字体样式可能不完全受面板控制。我的建议是,如果没有特别严格的制图规范要求,用“分子/分母”单行显示是出图最稳的;非要上下排列,就老老实实用多行加横线。

5.3 安装失败、卸载不干净的老问题

热搜词里看到不少人在问QGIS卸载后无法安装、安装报错之类的问题。这类问题我见过太多次了,绝大多数不是软件本身的问题,而是前面残留的东西没清干净。QGIS在Windows下会写注册表,同时用户配置目录通常在C:\Users\用户名\AppData\Roaming\QGIS下。如果你卸载后用清理工具扫一遍,再把这目录手动删除,重新安装大概率就正常了。安装包下载到一半失败导致的“不能安装”,通常是因为安装源不通畅,换个时间段或换国内镜像站点下载完整安装包即可。注意不要开着安全软件实时防护来装,有些杀软会拦截安装器的写文件操作,导致装到一半回滚。

5.4 如何在常规网络环境下加入在线地图底图

加载天地图、百度、高德这些在线地图源,是很多人拿到QGIS后干的第一件事。操作方法不复杂:在浏览器面板的XYZ Tiles项上右键,选“新建连接”,把瓦片地址模板填进去,比如常见的栅格瓦片地址格式是http://tile.xxx.com/{z}/{x}/{y}.png,然后在图层面板里把这个连接拖出来即可。关键点有三个:一是地址模板里的{z}/{x}/{y}大小写不能错,二是部分服务需要申请使用授权(key),三是这类在线服务对坐标系统有要求,通常请在添加后右键图层,检查是否被设置为对应的伪墨卡托投影(EPSG:3857),如果显示不正确,标注和量算都会出偏差。

至于卫星影像查看这件事,除了QGIS,开源GIS里还可以看GRASS、SAGA GIS、以及轻量的Marble等桌面工具。QGIS可以同时叠加矢量与影像,日常影像查看完全够用,不用刻意换工具。

5.5 关于社区里讨论的“QGIS MCP”

最近AI工具热,大家也在问QGIS有没有MCP(Model Context Protocol)支持。我可以告诉你,社区确实已经出现了针对QGIS的MCP相关插件,方向是让大语言模型能够调用QGIS的地图窗口、图层列表和数据处理接口,实现自然语言驱动制图。但我自己的实测感受是:这东西目前更适合做原型验证和小规模自动化,复杂制图流程还不够稳,毕竟QGIS操作上下文非常长,AI有时会误判图层顺序。做复杂制图,老老实实用“标签选项卡”和样式面板,比用自然语言快得多。

5.6 统计KML路线里程的简便做法

热搜里有“qgis统计kml路线公里数”,这个其实和标注有点关系——你也可以把里程直接做进标注里。把KML文件拖进QGIS后,路线通常以线要素图层形式加载。打开属性表,添加一个字段,用表达式$length可以算出要素长度(单位是数据本身的单位),如果KML是经纬度坐标,$length计算出来的是米,再用round($length/1000, 2) || ' km'转为公里。回到标签选项卡,文本表达式引用这个字段,地图上就直接标出每段路线的里程了。这也只有10分钟的工作量,但很多新手没想到可以用表达式直接算。

6. 一些关于标注的私人体会

做QGIS标签配置这几年,我最大的体会是:标注不是一个“最后加上去”的动作,它和图层样式、数据组织、出图比例尺是强耦合的。同样是标注村名,放到1:50000和1:200000的图面上,字号、缓冲宽度、是否重复,全部要跟着变。不要指望一套参数通吃所有图,最好在项目一开始就想好要出哪几种比例尺的图,把标签方案分别存成样式文件(.qml),到时候一键调用,比每次重新手搓快得多。

另外一个小技巧:如果你想保存标签设置,不一定非要把整个图层样式另存为qml,你可以在“图层属性→样式”里选择“保存为QML”。这样带着标签参数的文件可以直接分享给同事,也可以在不同项目间复用。想快速复制图层的标签设置,可以右键图层→样式→复制样式,再粘贴到目标图层,这招在多图幅分幅制图时能救你一命。

最后提醒一下:不管做得多花哨,地图上的文字终究是为了让人看清、看懂。标签选项卡里的那些参数,本质上都是在做“取舍”——该显示的显示,该让位的让位,该突出的突出。多想想这层逻辑,比你记住一百个按钮的位置都有用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询