从OSM数据到可交互地图:构建中国铁路网数据集的完整实践
最近在做一个与交通规划相关的个人项目,需要一份干净、可用的中国铁路网络数据集。市面上现成的数据要么太贵,要么格式不友好,要么更新不及时。于是,我把目光投向了OpenStreetMap(OSM)——这个全球最大的开源地理数据库。它的.osm.pbf格式数据包罗万象,但如何从中精准地“挖”出我们需要的铁路线、车站,并转换成地图应用能直接使用的mbtiles格式,这个过程本身就像一次充满挑战的数据探险。如果你也和我一样,厌倦了寻找现成方案,渴望从源头掌控数据,那么这篇手记或许能为你提供一条清晰的路径。我们将使用两个强大的命令行工具:osmium-tool和tilemaker,一步步完成从原始数据提取到生成可发布地图瓦片的全过程。
1. 前期准备:理解数据与工具链
在动手之前,我们需要对“原材料”和“工具”有一个清晰的认识。这能帮助我们避免很多后续的困惑和错误。
OpenStreetMap与.osm.pbf格式 OpenStreetMap的数据以多种格式提供,其中.osm.pbf(Protocolbuffer Binary Format)是当前最主流、最高效的全量数据格式。它采用Google的Protocol Buffers进行编码,相比传统的XML格式(.osm),其文件体积更小,读写速度更快。你可以把它想象成一个压缩的、结构化的全球地理信息数据库快照。
对于我们的目标——中国铁路网,数据就藏在这个庞大的数据库中。OSM使用一套灵活的标签(tags)系统来定义地理要素的属性。铁路数据主要涉及以下关键标签:
railway=rail: 标识主要的铁路轨道。railway=station: 标识火车站。railway=halt: 标识乘降所。railway=subway: 标识地铁线路(有时我们也需要这部分数据)。
工具选型:为什么是osmium-tool和tilemaker? 处理OSM数据的工具有很多,我们选择的组合基于以下考量:
| 工具 | 核心用途 | 在本项目中的角色 | 优势 |
|---|---|---|---|
| osmium-tool | OSM数据的读写、过滤、提取、差分等操作。 | 数据清洗与提取。从全球数据中裁剪出中国范围,并过滤出铁路相关的要素。 | 功能专一强大,处理PBF格式效率极高,是OSM社区维护的官方工具集之一。 |
| tilemaker | 直接将OSM的.pbf数据渲染成矢量瓦片(Vector Tiles),并打包为.mbtiles文件。 |
数据转换与打包。将过滤后的铁路数据转换成地图库(如Mapbox GL JS, Maplibre GL JS)能直接使用的格式。 | 无需中间数据库(如PostGIS),流程简洁;配置灵活,可通过Lua脚本深度控制要素的样式与属性。 |
这个组合的优势在于流程的轻量化和可控性。我们不需要搭建复杂的PostgreSQL/PostGIS数据库和渲染服务器(如TileServer-GL),直接在命令行中就能完成从原始数据到最终产品的转换,非常适合快速原型、定制化需求和小型应用部署。
提示:确保你使用的操作系统是Linux或macOS(或Windows下的WSL2),因为后续的编译和命令行操作在这些环境下最为顺畅。本文所有命令均基于Ubuntu/Debian系Linux,其他系统请参考工具官方文档进行相应调整。
2. 环境搭建与数据获取
工欲善其事,必先利其器。第一步是安装必要的工具并下载原始数据。
2.1 安装核心工具
打开终端,我们首先更新软件包列表并安装osmium-tool。在Ubuntu/Debian上,这非常简单:
sudo apt-get update
sudo apt-get install osmium-tool
安装完成后,可以通过 osmium --version 来验证是否安装成功。
接下来安装tilemaker。由于它通常不在默认的软件仓库中,我们需要从源码编译。这能确保我们获得最新版本,并支持所有特性。
# 安装编译依赖
sudo apt-get install -y libboost-system-dev libb


379

被折叠的 条评论
为什么被折叠?



