ARTICLE DETAIL

资讯详情

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

ArcGIS分子分母标注实战:从标注表达式到出图技巧

ArcGIS分子分母标注实战:从标注表达式到出图技巧 1. 为什么非要折腾“分子分母”这种标注先说个真实场景。做土地利用现状图的时候图斑上既要标地类编码又要标地类名称做土壤图时上面是土种代号下面是土种名称做林业调查图时小班号、面积这些也得叠在一起。如果老老实实并排写一行图上会挤成一团线划密集的地方根本没法看。把内容拆成上下两行、中间再拉一条横线就是制图里最常见的“分数式标注”也就是大家口中说的分子分母标注。ArcGIS里的标注Label功能本身不支持直接拖一个“分数控件”出来但得益于标注表达式Label Expression的存在这个问题有非常成熟的解法。核心思路就一句话用换行符把两行内容堆叠起来再用带下划线的字符模拟分数线。这套玩法在ArcMap时代已经很成熟到了ArcGIS Pro里基本延续了同样的逻辑只是界面和部分写法有调整。这篇东西适合谁看天天跟ArcMap/ArcGIS Pro打交道、被图斑标注逼疯的GISer尤其是做自然资源、国土规划、林业调查、水利普查的朋友。看完之后你不仅能解决分子分母标注还能顺手搞明白标注表达式里那些文本格式化标签的用法碰到类似的复合标注需求上标下标、多字段拼接、条件显示都能自己举一反三。2. 先把标注表达式这东西吃透2.1 标注本质上是一段“会动态计算的文本”很多人用了几年ArcGIS标注功能还停留在“选个字段、调个字号”的层面。其实标注表达式才是真正的核心。标注框里的内容不一定非要是某个字段的原始值它可以是一段由字段值、字符串、格式化标签组合起来的表达式。表达式怎么算标注就怎么显示。打个比方这就像Excel里单元格既可以填死数字也可以填公式。ArcGIS的标注表达式就是那个“公式”。它能取字段、拼字符串、做条件判断甚至调字段的小数位。分子分母标注、上下标、替换空值这些操作本质上都是在这个“公式”里做文章。2.2 两种解析语言怎么选ArcMap的标注表达式默认使用VBScriptArcGIS Pro默认使用Python。这俩选谁很关键因为语法完全不同。VBScriptArcMap时代的默认选项语法松散字符串拼接用换行符是vbCrLf字符串用双引号包。不区分大小写对新手友好。PythonArcGIS Pro的默认选项字符串拼接用换行符是\n条件判断用if/else。区分大小写严谨但也更容易踩坑。我的建议是如果只在ArcMap里干活就老实学VBScript如果要在ArcGIS Pro里干活直接学Python。两个软件都用的最好把两套都掌握。不过也不用慌分子分母标注的核心逻辑两边一样区别只是换行符和拼接符号的写法不同。提示表达式里所有符号都必须在英文输入法状态下输入。中文引号、中文括号是ArcGIS标注表达式里最常见的报错元凶我见过太多人折腾半天最后发现问题只是输入法没切。2.3 换行、下划线两个关键元素分子分母标注能成立靠的就是两个不起眼的东西换行符VBScript里是vbCrLfPython里是\n。作用很简单把内容从一行截断让后面的内容跑到下一行。下划线文本标签UND和/UND一个开始、一个结束。被这对标签夹住的内容会给文字底部画一条线。这条线就是分数式标注里的那根分数线。原理就是这么简单第一行内容用UND包起来加下划线然后换行第二行正常显示。视觉上上行的文字带下划线下行的文字紧贴在下面看起来就像分子分母结构。3. 实操环节从打开属性到出图3.1 ArcMap里的标准操作流程第一步右键图层打开图层属性Layer Properties切到“标注”Labels选项卡。确保勾选了“标注此图层中的要素”Label features in this layer然后在“方法”Method里选择“以相同方式为所有要素加标注”Label all the features the same way。第二步点击“表达式”Expression按钮打开标注表达式编辑器。在“解析程序”Parser下拉框里选择“VBScript”然后在下方的大输入框里输入表达式。第三步输入核心表达式。假设分子字段叫DLBM地类编码分母字段叫DLMC地类名称最直接的写法是UND [DLBM] /UND vbCrLf [DLMC]这个表达式做了三件事把DLBM字段的内容加上下划线标签用vbCrLf换行再接上DLMC字段的内容。点“确定”之后回到属性窗口再点一次“确定”图上就能看到分子分母效果了。第四步调整细节。如果觉得分子和分母贴得太近可以在下划线那个位置加一个空格。比如UND [DLBM] /UND vbCrLf [DLMC]这样下划线到第二行文字之间会有一段空隙视觉效果更接近印刷体的分数线。3.2 ArcGIS Pro里的差异点ArcGIS Pro的操作路径稍有不同。右键图层选择“标注”Labeling选项卡然后在功能区右侧找到“表达式”Expression按钮点击打开“标签表达式”窗口。Pro默认的解析程序是Python所以换行符要用\n字符串拼接要用UND $feature.DLBM /UND \n $feature.DLMC注意Pro里字段的引用方式变了不是[字段名]而是$feature.字段名。这是Pro和ArcMap最大的语法差异相当于换了一套引用规则。字符串里的\n是Python的换行转义序列。还有一点Pro里的下划线标签样式更丰富。比如你可以单独指定下划线的颜色、粗细甚至用UND underlinetrue这种带参数的形式具体版本支持情况略有差异。不过大多数场景下默认的UND标签已经够用。3.3 让标注更耐看的几个微调分子分母结构搭起来了但直接应用会发现很多细节不好看。分享几个我长期摸索出来的微调技巧分子分母字号不同地类编码通常比较短地类名称很长两个都一个字号会很别扭。可以在表达式中对分子部分单独设置字号比如FNT name\宋体\ size\8\ [DLBM] /FNT。注意VBScript里在字符串中嵌引号需要把引号写成\转义。分母加括号有些行业规范要求分母部分用括号括起来比如(耕地)。那就直接在表达式里拼接括号字符就行。整体缩进或对齐标注表达式支持JUST标签控制对齐方式。默认是居中对齐但你可以改成左对齐或右对齐。用制表符控制间距在标注文本里插入vbTabVBScript或\tPython可以实现对齐效果适合处理多列内容。这些细节不是必须的但出图质量高低往往就体现在这种地方。4. 进阶玩法分子分母标注的变体4.1 分子分母不只有一个字段实际项目中分子和分母经常是由多个字段拼出来的。比如土地利用现状图图斑分子是“地类编码流转方式代码”分母是“图斑号/面积”。这时候表达式就变成了多段拼接UND [DLBM] [YSFS] /UND vbCrLf [TBH] / [MJ]核心思想是换行之前可以随便拼换行之后也可以随便拼。连接符的作用就是把各种字段和常量字符串串起来相当于把标注内容当一条字符串编织出来。如果某个字段可能有空值空值会显示成“空字符串”还是“ ”默认情况下ArcGIS会把空值字段显示成空但如果你用PythonNone会被显示成“None”字样这个坑要注意。处理办法是在表达式里加判断def FindLabel(DLBM, DLMC): if DLBM is None: DLBM return UND DLBM /UND \n DLMC在Python解析器里你可以像写函数一样定义FindLabel传入字段作为参数在函数里做各种逻辑判断。这是Pro里最灵活的一种写法复杂度可以无限提升比如判断长度、截断长文本、根据数值范围切换颜色等。4.2 上下标标注角标也能做分子分母结构搞定了顺带说一下上下标。ArcGIS标注表达式里有一组专门的标签SUP和/SUP上标SUB和/SUB下标比如要在图斑号后面加个平方米的上标[DLBM] vbCrLf [MJ] SUP2/SUP这种标注在做面积注记、坡度标注的时候非常常见。上下标标签可以和换行、下划线组合使用实现更复杂的排版。比如要做“分子是某数值分母是平方米且带²上标”这种复杂结构UND [DLBM] /UND vbCrLf [MJ] SUP2/SUP4.3 条件式标注只有特定要素才显示分数有些图层数据杂既有需要分数标注的要素又有不需要标注的要素。这时候可以在标注表达式里做条件判断。VBScript的写法是if [DLBM] 耕地 then FindLabel UND [DLBM] /UND vbCrLf [DLMC] else FindLabel [DLBM] end if注意VBScript的自定义函数名必须是FindLabel函数返回值就是展示的标注文本。这相当于给标注加了一个“总开关”符合条件的用分数样式不符合的用普通样式。Python写法def FindLabel(DLBM, DLMC): if DLBM 耕地: return UND DLBM /UND \n DLMC else: return DLBM条件判断不只是“等于/不等于”还可以做数值判断比如面积大于多少才标注或者用拼接多个条件。这样一来标注就从一个单纯的“显示字段值”升级成“按规则渲染文本”能解决很多生产问题。4.4 依赖注记更精细的排版控制如果只是出个小图标注表达式足够用了。但要做大图、精图比如提交验收的成果图标注的自由度往往不够——位置不能微调、压盖难处理、打印时字体丢失。这时候建议把标注转成注记Annotation。操作路径右键图层 → 将标注转换为注记Convert Labels to Annotation。转成注记后每条注记都变成独立的要素可以单独拖动、修改文字、调整大小分子分母结构也可以手动微调。但注意转注记之前最好先把标注表达式的样式、字体全部调到位转换后就是“所见即所得”再改就得一条条改了。5. 避坑指南那些年我踩过的标注“雷”5.1 换行符显示成“口口”或显示成代码VBScript的vbCrLf在某些老版本字体环境下会显示成奇怪的方框尤其是配合某些中文字体时。遇到这种情况可以换成Chr(13) Chr(10)来强制回车间隙或者给文本单独指定一个兼容性好的字体。5.2 表达式中文字符串的引号问题VBScript里字符串用双引号包如果有英文双引号嵌在里面需要写两个连续的引号或者用转义。Python则更宽容单引号双引号都可以但混用时容易眼花。一个实用建议写表达式时先把输入法切到英文降低出错概率。5.3 下划线多出来半截UND标签只对标签内部的文字起作用但有时候文字末尾和换行符之间如果有空格下划线就会多出半截看起来像尾巴。解决方法是检查分子字符串末尾有没有意外空格。如果用了多段拼接 这种写法额外加分了空格就必须把空格包进UND内部或外部的正确位置。5.4 标注文字被压盖、显示不全分子分母结构的标注天然比单行标注占垂直空间。在地图缩放时小比例尺下可能出现标注重叠。常规处理办法设置标注权重Label Weight、调整要素权重或者在标注优先级里压低其文本等级。不要指望标注能自动避让除非你用了Maplex标注引擎。ArcGIS Pro里标注引擎默认就是Maplex避让能力比ArcMap强很多。ArcMap用户记得在标注选项卡里把“标注引擎”Label Engine切到“Maplex标注引擎”否则压盖问题会让你出图时怀疑人生。5.5 Pro里字段名大小写报错Python解析器对字段名大小写敏感。$feature.DLMC和$feature.dlmc可能一个能用、一个报错。我建议写表达式之前先在Pro的字段视图里确认字段名的准确大小写。特别是从外部数据导入的图层字段名经常被系统自动改过大小写这时候照抄原始表格里的字段名写法反而出错。5.6 导出图片时字体变样分子分母标注的横线本质是文本下划线不是图形。如果你把图导出为PDF或AI格式在别的软件里打开字体不支持的话下划线可能会丢失或变形。稳妥做法是出图前把所有字体统一为系统标准中文字体如宋体、黑体避免使用特殊字体。如果是印制地图转注记后再导出是最保险的。6. 问题速查清单现象可能原因解决方案标注没有出现分子分母效果变成一行没有加换行符或换行符写错VBScript用vbCrLfPython用\n下划线消失或变成乱码字体不支持下划线标签换宋体、黑体等标准字体表达式输入后报错中文符号混入全部使用英文输入法重写分子和分母挤在一起缺少空隙在/UND后加一个空格或调段距某些要素没标注字段值是空值在表达式里加空值判断标注被周围压盖标注引擎没有启用Maplex在标注设置里切换Maplex引擎导出PDF后下划线偏移字体嵌入问题转注记后导出或嵌入字体设置7. 一个小技巧把分母基线下移更美观最后再分享一个私货。默认情况下第二行文字会紧贴第一行文字的下划线视觉上略挤。其实可以用一个空字符行来撑开间距让标注更透气。VBScript写法UND [DLBM] /UND vbCrLf vbCrLf [DLMC]这相当于在分子、分母之间插入了一个空白行作为缓冲。别人看你的图会觉得“这标注怎么这么清爽”但说不出来哪里不一样。这就是细节的价值。我个人在实际操作中的体会是ArcGIS标注表达式这套东西刚接触确实觉得语法烦、坑多但一旦玩熟了它能解决的问题远远超出分子分母标注本身。像那种一张图里既要有分数式标注、又要有角标、还要带条件判断的复杂需求靠的就是把换行、UND、SUP、SUB这些基础元素组合起来。基础标签就几个真正的门道在于组合的思路——跟搭积木差不多知道哪块放在哪个位置作品水平就上来了。
返回列表