本文以“变电站(substation)”和“电线(line)”为例,演示如何在 QGIS 中利用表达式,从 OSM 数据里筛选出特定类型、特定电压等级的电力设施。

准备工作:数据 & 工具

软件准备

  • QGIS(建议 3.x 版本)
  • 已安装好中文界面(可选)

获取 OSM 数据

常见做法有两种:

  1. 到类似 Geofabrik、BBBike 等网站下载对应区域的 OSM 数据(.pbf.osm 或已转好的 gpkg / shp)。
  2. 使用 QGIS 插件(例如 QuickOSM)在线抓取特定区域的 OSM 数据。

本教程默认你已经有一份包含电力设施信息的 OSM 矢量数据,并且在 QGIS 中能看到属性字段里有 other_tags 这一列。

图 1: 在 QGIS 中加载 OSM 图层与属性表


认识 other_tags 字段

在很多 OSM 转换后的数据里,最常用的主标签(如 highwaybuilding)会被单独拆出来,剩余的就被塞进一个类似 other_tags 的字段中。

这个字段通常是一个字符串,里面长得像这样(示意):

"power"=>"substation","voltage"=>"110000","name"=>"XXX变电站"

后面我们所有的筛选表达式,都是围绕这个大字符串做 LIKE 匹配。


在 QGIS 中使用“按表达式选择”

不管是提取变电站还是电线,操作步骤基本一样:

  1. 在图层面板中选中你的 OSM 图层(例如 osm_power)。
  2. 右键 → 打开属性表
  3. 在属性表左上角点击下拉菜单,选择 按表达式选择要素…

图 2:打开属性表与“按表达式选择要素”窗口

接下来,就可以在“表达式”框中输入筛选条件了。


提取变电站(substation)

提取所有变电站

表达式如下(注意这里用的是英文直引号):

"other_tags" LIKE '%"power"=>"substation"%'

含义:只要 other_tags 字段里包含 "power"=>"substation" 这段文本,就视为变电站。

  1. 将上面表达式粘贴到“表达式”框。
  2. 点击 选择要素
  3. 属性表中就会高亮出所有被选中的变电站要素。

如需单独保存变电站图层:

  1. 在图层面板中,右键原始图层 → 导出 → 将所选要素另存为…
  2. 选择输出格式(例如 GeoPackage 或 Shapefile),命名为 substation_all

提取 110 kV 变电站

如果在数据中,电压值以 110000(单位:V)出现在 other_tags 里,可以用:

"other_tags" LIKE '%"power"=>"substation"%' 
AND "other_tags" LIKE '%110000%'

逻辑很直接:

  • 第一部分:先锁定“是变电站”的记录;
  • 第二部分:再过滤出“包含 110000(即 110 kV)”的记录。

跟刚才一样,可以把选中的要素另存为一个新图层,例如 substation_110kv,方便后续制图或分析。


同时提取 110 kV 和 220 kV 变电站

如果你想把 110 kV 和 220 kV 的变电站一次性挑出来,可以在表达式里加上括号和 OR

"other_tags" LIKE '%"power"=>"substation"%' 
AND (
    "other_tags" LIKE '%110000%' 
    OR "other_tags" LIKE '%220000%'
)

这里建议格式化一下表达式(像上面这样分行),更方便以后维护。

之后同样可导出为 substation_110_220kv 图层。


提取电线(输电线,line)

电线在 OSM 中通常用 power=line 标注。思路几乎一模一样,只是把 substation 换成 line

提取所有电线

"other_tags" LIKE '%"power"=>"line"%'

执行后,你会得到图层中所有有 power=line 标记的线要素。

建议同样导出成单独图层,例如:power_line_all


提取 110 kV 电线

"other_tags" LIKE '%"power"=>"line"%' 
AND "other_tags" LIKE '%110000%'

解释:

  • 第一部分:只保留电线;
  • 第二部分:只要这条电线关联的标签里有 110000,就认为是 110 kV 线路。

提取 110 kV 和 220 kV 电线

"other_tags" LIKE '%"power"=>"line"%' 
AND (
    "other_tags" LIKE '%110000%' 
    OR "other_tags" LIKE '%220000%'
)

这样即可一次性选出常见的 110 / 220 kV 输电线,为后续做分级符号化、线路走向分析或与负荷中心叠加分析做准备。


把筛选结果变成可用图层

无论是变电站还是电线,用表达式选出之后,通常会有两个常见动作:

  1. 导出为新图层

    • 图层右键 → 导出 → 将所选要素另存为…
    • 选择格式、投影,命个清晰一点的名字(比如 power_substation_110_220kv.gpkg)。
  2. 设置样式

    • 变电站(点/面):可以用不同电压等级设置不同颜色或符号大小。
    • 电线(线):按电压等级分级渲染,电压越高,线条越粗或颜色越醒目。

同样的方法提取其他类型的 OSM 数据

虽然这次讲的是“电线”和“变电站”,但思路其实可以套用到几乎所有 OSM 要素上:

  • "power"=>"substation" 换成 "power"=>"generator",你就可以筛选发电机组;
  • "power"=>"line" 换成 "highway"=>"primary",就变成提取主干道路;
  • 再结合电压、容量、材料等字段,就可以做更精细的分类。

简单总结一下这套流程:

  1. 在 OSM 数据里找到你感兴趣的 key/value(如 power=substation)。
  2. 看它是在独立字段里,还是被打包进 other_tags 里。
  3. 用 QGIS 的“按表达式选择”,结合 LIKEANDOR 写出筛选条件。
  4. 把选中的要素导出为独立图层,配好样式,就可以快乐出图了。