在 osmchina 数据库中检索中国高速铁路(高铁)网的实战指南
中国建成了世界上规模最大的高速铁路网(“八纵八横”客运专线通道)。在 OpenStreetMap 数据库中,高速铁路(High-speed Railway / HSR)与普速铁路虽共享部分物理轨道标准,但拥有独特的标签属性与网络关系结构。
本文总结在本地 osmchina 数据库中,如何高效定位中国高速铁路线路、甄别主线与动车联络线,并提取沿途设站城市的实战经验。
一、中国高铁在 OSM 中的数据结构特征
- 关系标签特征:
- 关系类型:
tags->>'route' = 'railway'或tags->>'route' = 'train'。 - 命名习惯:通常包含“高铁”、“客运专线”、“高速铁路”(例如
京沪高铁、贵广客运专线、成贵客运专线)。 - 国铁线路编码:
tags->>'ref'通常为四位国铁数字编码(如京沪高铁ref='3002'、贵广客专ref='3044'、成贵客专ref='3041')。
- 关系类型:
- 物理轨道与时速标签 (
planet_osm_line):railway = 'rail'highspeed = 'yes'usage = 'main'maxspeed = '300'或'350'(设计运营时速)
- 主线与联络线甄别:
- 大型枢纽(如北京南、南京南、虹桥、武汉、广州南)附近存在大量“进出站线”、“动走线”、“下行联络线”。
- 提取骨干大动脉时,应优先挑选 成员数大于 300+ 且名称不带“联络线/进站线”的主干关系。
二、高效查询高铁线路的 SQL 技巧
技巧 1:检索国家高铁干线(以京沪高铁为例)
SELECT
id,
tags->>'name' AS name,
tags->>'ref' AS ref,
tags->>'wikidata' AS wikidata,
tags->>'from' AS from_station,
tags->>'to' AS to_station,
jsonb_array_length(members) AS way_count
FROM planet_osm_rels
WHERE (tags->>'route' = 'railway' OR tags->>'route' = 'train')
AND (tags->>'name' = '京沪高铁' OR tags->>'name:zh' = '京沪高铁' OR tags->>'wikidata' = 'Q913275');
技巧 2:两步法提取高铁轨迹几何与里程计算
WITH hsr_ways AS (
SELECT DISTINCT (m->>'ref')::bigint AS way_id
FROM planet_osm_rels, jsonb_array_elements(members) m
WHERE id = 356778 AND (m->>'type') = 'W'
)
SELECT
COUNT(l.osm_id) AS way_count,
ROUND((SUM(ST_Length(l.way)) / 1000)::numeric, 1) AS total_track_km,
-- 抽稀输出适合前端全屏渲染的线路数据
ST_AsGeoJSON(ST_Simplify(ST_Transform(ST_Union(l.way), 4326), 0.001)) AS geojson
FROM hsr_ways w
JOIN planet_osm_line l ON l.osm_id = w.way_id;
技巧 3:空间求交提取高铁沿线设站城市
通过高铁矢量线与地级行政区边界求交:
WITH hsr_line AS (
SELECT ST_Transform(ST_Union(l.way), 4326) AS geom
FROM planet_osm_line l
WHERE l.osm_id IN (/* 京沪高铁 way_ids */)
)
SELECT
c.adcode,
c.name,
c.level
FROM map_province c, hsr_line r
WHERE c.geom && r.geom AND ST_Intersects(c.geom, r.geom)
ORDER BY c.adcode;
实战结果:京沪高铁全长约 1,318 公里,沿途串联北京、天津、廊坊、沧州、德州、济南、泰安、济宁、枣庄、徐州、宿州、蚌埠、滁州、南京、镇江、常州、无锡、苏州、上海等 19 个直辖市与地级市。
三、著名高速铁路 OSM 关系速查表
| 高铁名称 | 规划区间 | 线路编码 (ref) | Relation ID | Wikidata ID |
|---|---|---|---|---|
| 京沪高铁 | 北京南 $\rightarrow$ 上海虹桥 | 3002 |
356778 |
Q913275 |
| 贵广客运专线 | 贵阳北 $\rightarrow$ 广州南 | 3044 |
3999066 |
Q5616932 |
| 成贵客运专线 | 成都东 $\rightarrow$ 贵阳北 | 3041 |
7754722 |
- |
| 银西高铁 | 西安北 $\rightarrow$ 银川 | 3100 |
11549538 |
Q17164272 |
| 渝万高铁 | 重庆北 $\rightarrow$ 万州北 | 3063 |
4868613 |
Q15912446 |
| 沪渝蓉高铁 (在建/部分段) | 上海 $\rightarrow$ 成都 | 3136 |
17327779 |
Q19855970 |
本项目提供了自动化高速铁路提取工具 scripts/export_hsr_geojson.py,支持一键生成高铁沿线市县空间地图。