用 QGIS 在地圖上繪製河流
最近在做一个需要标注河流的地图,使用了 World Wildlife Fund (WWF) 提供的 HydroRIVERS 数据集。他们的数据包含全球河流,并附带了重要的水文属性,如流量和河级。1
这份笔记记录了在 QGIS 中使用这份数据时遇到的主要问题及解决方案。包括:
- 如何使用 HydroRIVERS 数据 在 QGIS 中显示亚洲的河流网络。
- 想要地图上只显示主要河流,要怎幺做?
- 想在特定河流上标注名称,如“熊野川”,要怎幺做?
- 想在地图上删去某条河流要怎幺做?

1 在 QGIS 画出亚洲所有的河流
数据获取
- 访问 HydroSHEDS 网站,找到 HydroRIVERS 产品页面。网址: https://www.hydrosheds.org/products/hydrorivers
- 在下载区,找到 范围(Extent)为“Asia”、文档格式(File format)为“Shapefile”的数据,并下载对应的压缩包。
- 解压缩后将得到一组文档,其中包括:
- 内核图形文件:.shp
- 属性表格:.dbf
- 投影信息:.prj (ASCII 文本档)
- 索引文件:.shx、.sbn、.sbx
Shapefile 格式需要一组文档(.shp, .dbf, .shx, .prj 等)才能完整使用。
在 QGIS 加载 .shp 文档
- 打开 QGIS。选择 图层 (Layer) > 添加图层 (Add Layer) > 添加矢量图层 (Add Vector Layer)。
- 在打开的对话框中,点击矢量数据集右侧的“…”,找到解压缩后的文件夹,载入
.shp文件。 - 点击 添加 (Add)。数据较大,可能需要等待一段时间。
2 仅显示较大河流(数据筛选)
- 在「图层」面板中,右键点击 HydroRIVERS 图层,选择 过滤(如下图)。
- HydroRIVERS 提供了两个主要的规模属性:
- DIS_AV_CMS:长期平均径流量。
- ORD_STRA:斯特拉勒河级(Strahler Order)。
- 构建表达式: 选择一个合适的流量阈值(例如,只显示流量 $\ge 50 \text{ m}^3/\text{s}$ 的河流)。
"DIS_AV_CMS" >= 50
- 点击 确定 (OK)。地图上将只显示符合条件的较大河段。

3 给河流标上名字
现在想要在特定河流上标注「熊野川」。
手动添加名称字段
- 添加名称字段:
- 右键点击 HydroRIVERS 图层,选择 打开属性表 (Open Attribute Table)。
- 点击 切换编辑模式(铅笔图标,见下图①)。
- 点击 新建字段 (见下图②),创建一个名为
RiverName的“文本(字符串)”类型的新字段。将长度设为 50。

- 手动输入名称:
- 使用 选取要素 工具在地图上框选「熊野川」的所有河段(如下图)。
- 右键点击 HydroRIVERS 图层,再次选择 打开属性表。
- 在弹出的窗口中,在顶部菜单栏中点击 字段计算器 (算盘图标)。
- 勾选 更新现有字段,选择
RiverName。 - 在表达式中输入
'熊野川'(使用单引号)。 - 点击 确定 (OK) 并保存编辑。

现在再次右键点击 HydroRIVERS 图层,打开**“属性..” > 标注 > 单一标注 > OK**,就能在河流上看到“熊野川”的标注。
如果显示为“???”,则需要修改图层的 数据源编码(如 GBK 和 UTF-8)。 右键点击图层,打开“属性..” > 源 > 设置 > 数据源编码。
优化标注位置
为了避免「熊野川」这个名字在河道上重复出现多次
- 右键点击图层,打开“属性..”> 标注。
- 切换到 渲染 (Rendering) 子页签。
- 在 要素选项 (Feature Options) 中,勾选 合并相连的线以防止重复标注。
如果河流是垂直走向,标签会难以阅读,需要将中文/日文本符竖排显示:
- 打开“属性..”> 标注 > 位置,在常规设置中将“模式”改为“水平”。
- 打开 HTML 格式: 进入 标注 > 文本,勾选 允许 HTML 格式化 (Allow HTML formatting)。
- 修改标注表达式: 点击 值 (Value) 字段右侧的 Э(epsilon)图标,输入以下表达式:
regexp_replace("RiverName", '(.)', '\\1<br />')。这会在中文本符之间插入 HTML 换行标签<br />,模仿竖排效果。 - 优化显示: 在 描边 子页签,勾选 绘制文本描边,确保竖排文本清晰可见。
4 在地图上删去某条河流
想要删除熊野川北侧的“北山川”。
识别目标河流
找到想删除的那条河流的唯一标识,例如它的 HYRIV_ID 或您手动添加的 RiverName 字段。
- 使用 选取要素 (Select Features) 工具在地图上框选需要删去的河段。
- 右键点击图层,选择 打开属性表。
- 在弹出的窗口的左下角,展开下拉式选单,选中“显示选中的要素”。
- 记下
HYRIV_ID,或修改RiverName为「River X」。
添加排除该河流的条件
- 在「图层」面板中,右键点击 HydroRIVERS 图层,选择 过滤。
- 修改表达式: 在原有的筛选条件上,添加排除该河流的条件。
假设主要条件是 "DIS_AV_CMS" >= 50 ,想排除名为「River X」的河流:
"DIS_AV_CMS" >= 50
AND "RiverName" != 'River X'
也可以使用 ID 排除: 假设 ID 是 40551262、40551676 和 40552098:
"DIS_AV_CMS" >= 50
AND "HYRIV_ID" != 40551262
AND "HYRIV_ID" != 40551676
AND "HYRIV_ID" != 40552098
- 点击 确定 (OK)。这样该河流就会被精确地从地图上排除。
參見 Lehner, B., Grill G. (2013). Global river hydrography and network routing: baseline data and new approaches to study the world’s large river systems. Hydrological Processes, 27(15): 2171–2186. https://doi.org/10.1002/hyp.9740 ↩︎