把城市路网变成进度条:走过的路自动点亮,没走过的还是灰色。 步行 + 骑行 | 首发城市:成都
本仓库是数据管线原型(M0–M2),把 OSM 路网变成可匹配、可点亮的"路段"数据集,并用模拟 GPS 轨迹验证整条链路。产品构思见 doc/product-concept.md。
build_network(路网构建)→ simulate_tracks(轨迹模拟)→ match_tracks(HMM 匹配点亮)→ visualize(可视化)
# 环境(Python 3.12)
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt leuvenmapmatching folium matplotlib rtree
# 1) 构建成都五城区步行/骑行路网(需联网,结果会缓存)
.venv/bin/python scripts/build_network.py # 也可 -t walk / -t bike
# 2) 模拟 GPS 轨迹(步行 5 条)
.venv/bin/python scripts/simulate_tracks.py -n walk -k 5
# 3) HMM map matching,点亮走过的路段
.venv/bin/python scripts/match_tracks.py -n walk
# 4) 输出总览图与交互地图
.venv/bin/python scripts/visualize.py -n both| 网络 | 路段数 | 路口节点 | 总里程 |
|---|---|---|---|
| 步行 walk | 44,523 | 30,674 | 5,602.8 km |
| 骑行 bike | 36,718 | 25,032 | 5,382.1 km |
模拟轨迹匹配质量(与真值对比):
- 步行:recall 87.7%–94.2%,precision 84.2%–91.0%
- 骑行:recall 82.3%–94.6%,precision 83.9%–100%
- 已点亮:walk 1,033 段 / 134.5 km(2.4%),bike 584 段 / 73.7 km(1.4%)
data/
├── raw/tracks/<network>/ # 模拟 GPS 轨迹 + 逐点/逐段真值
└── processed/
├── <network>/ # edges.parquet(唯一路段)、edges_directed.parquet(有向+几何)、nodes、graphml
├── tracks/<network>/ # 每条轨迹的匹配结果
├── coverage/<network>/ # walked_segments.parquet + stats.json(覆盖统计/匹配质量)
└── visualization/ # coverage_<network>.png(全城总览)/ .html(交互地图)
可视化效果:灰色为未走过的路网,红色为已点亮路段。
- M0 路网构建(segment 化、双向归并、平行路拆分)
- M1 GPS 轨迹模拟(真实路网随机游走 + 噪声/离群点 + 逐点真值)
- M2 HMM map matching + 路网点亮 + 可视化
- M3 道路进度(按整条路聚合)、断点提示("只差最后 200m")
- M4 统计成就、天府绿道专题
开发约定与坑位说明见 AGENTS.md。