QGIS 规则化符号怎么配:条件优先级、空值处理与多比例尺复核

QGIS
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

QGIS 规则化符号怎么配:条件优先级、空值处理与多比例尺复核

同一张管网图里,主管、支管、停用段和待核查要素往往需要不同表达。若只靠一个分类字段,遇到状态叠加、空值和缩放变化时就会失真;若规则随手叠加,又会出现同一要素被画两次。QGIS 的规则化符号能表达复杂业务逻辑,但必须像写程序一样管理优先级、覆盖范围和验收样本。

规则是有顺序的筛选条件

一个要素可能同时满足多个规则。需要独占展示时,应让条件互斥或使用 ELSE;允许叠加时则要明确每层承担的是底线、描边还是告警标记。

空值不是默认类别

NULL、空字符串和未知编码代表不同数据状态。把它们自动染成普通类别会掩盖数据治理问题,应单独设置醒目的待核查规则。

比例尺改变信息密度

小比例尺仍画出所有支线,地图会变成色带;大比例尺过早隐藏细节,又会误导巡检。规则应配合 scale range 和简化的层级策略。

表达式必须可读可测

复杂 CASE 与正则可实现一切,但难维护。应将业务判断拆成命名清楚的小规则,并在表达式预览中逐条统计命中数。

可执行实操流程

  1. 整理字段字典,明确管径、材质、运行状态和数据质量标记的优先顺序;先写出业务语言,再翻译为表达式。
  2. 在样本图层中创建互斥规则:停用或异常优先,其次主管,再到普通支管;为未知值配置独立颜色与线型。
  3. 对每条规则查看过滤命中数,确认规则总数、ELSE 数和图层总要素数关系可解释。
  4. 分别在常用浏览尺度和布局输出尺度检查线宽、标记间距与重叠;必要时在小比例尺仅保留骨干层。
  5. 保存 QML 与规则说明,换一份新数据加载后检查新增编码是否落入未知规则,而非静默套用旧样式。
CASE
 WHEN "status" IN ('closed','unknown') THEN true
 WHEN "diameter" IS NULL THEN true
 ELSE false
END

项目避坑与质量检查

许多项目只检查“主干看起来对”,却没有检查错误编码是否被正常规则吃掉。我会在规则最末放置一个明显的 ELSE 样式,并要求交付前其命中数为零或有解释。这样新批次出现拼写、空格或未登记编码时,地图会主动暴露问题。

检查阶段 必须保留的证据 异常处理
输入 字段值域、空值和未知编码数量 隔离异常样本,不直接覆盖源数据
处理 每条规则命中数与重叠关系 回到参数、单位与筛选条件逐项复现
交付 三种比例尺截图与新数据加载结果 用独立样本或第二个环境复核

让流程能被下一位同事复跑

样式文件旁应有一页规则清单:每条规则对应的业务含义、优先级、比例尺范围和未知值策略。符号不是装饰,它是数据质量与业务状态的可视化接口。

源数据批次、坐标参考、关键参数、异常清单和前后统计放在同一份处理记录中。这样数据更新时,团队判断的是结果差异来自哪里,而不是重新猜测上一次做过什么。

抽样复核与交接记录

发布前还应把同一套 QML 同时加载到完整数据和只含边缘样本的数据上:前者检查规则覆盖率,后者检查狭窄管段、短小要素与空值是否仍清晰可辨。并在打印布局中确认线型和颜色没有因导出分辨率而改变。若图例无法解释所有可见符号,说明规则层级仍需要收敛。

FAQ

规则顺序会影响结果吗?

会。尤其使用 ELSE 或多个符号层时,顺序决定哪些条件先被消费、哪些图层覆盖在上面。

NULL 和空字符串怎么写?

NULL 用 IS NULL 判断,空字符串需单独判断。两者都应有明确的业务处理,不要混为一类。

如何防止新编码被误画?

设置显眼的 ELSE 或未知值规则,并在每次数据更新后检查其命中数。

总结

规则化符号的关键是把业务优先级和异常状态显式画出来。能看见未知值的地图,才是可持续维护的地图。