ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

QGIS标签选项卡详解:从字段标注到避让与条件控制

QGIS标签选项卡详解:从字段标注到避让与条件控制 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默认是关闭的它给标注文字投射深色影子增加立体感不过地图要素多的时候慎用会显得脏。如果你确实要做“立体字”效果阴影偏移设成偏移X0.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 styletext-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有没有MCPModel 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”。这样带着标签参数的文件可以直接分享给同事也可以在不同项目间复用。想快速复制图层的标签设置可以右键图层→样式→复制样式再粘贴到目标图层这招在多图幅分幅制图时能救你一命。最后提醒一下不管做得多花哨地图上的文字终究是为了让人看清、看懂。标签选项卡里的那些参数本质上都是在做“取舍”——该显示的显示该让位的让位该突出的突出。多想想这层逻辑比你记住一百个按钮的位置都有用。
返回列表