Commit 8015568
committed
feat(map): 滑行道路网与按管制指令规划路线
TODO P3 #6「地面滑行引导」的算法底座:把 OSM 的 aeroway 折线连成带权无向图,
支持最短路与「按管制指令依次经过指定滑行道」。
── 连通性比预想的容易 ──
TODO 里写的难点是"OSM 数据的连通性清洗(断头、重复节点、缺失连接)",实测并非如此:
OSM 在每个路口都把滑行道切成独立的 way,相邻 way 共享节点,Overpass 的 out geom
吐出的坐标逐位相同。EDDM 608 条 way / 3509 节点,按坐标原样建图后 99% 落在同一个
连通分量里(RCNN、EDDN 100%)。所以刻意不做距离吸附 —— 一旦引入容差,间距十几米的
平行滑行道会被粘成一条,规划出穿越草坪的路线,那比断开危险得多。
── 真正的难点是"走过"而不是"碰到" ──
按指令规划返工了三次,每次都是真实数据抓出来的:
① 走到某条道的端点不等于沿它滑过。指令 `via E1, S, B2` 头一版规划出的路线压根
没经过 B2,函数还返回成功 —— 这种"看着像模像样其实错的"路线最危险。
② 管制只念关键滑行道,中间的连接段(C5、S6)不念但确实要走,
所以不能要求相邻两条道在图上直接相接。
③ 同一个编号在 OSM 里可能是好几截互不相连的道(E1 在 EDDM 分布在航站楼两侧),
出口必须在"从入口沿该编号可达的那一截"里挑。
现在 EDDM 四条指令全部走通,且显式点名所有连接段与只点关键道得到同一条路线。
跑道段加惩罚权重:不加的话最短路会理直气壮地穿跑道抄近道。
49 例单测(含 RCNN 真实机场夹具),13 处变异全部捕获。
界面接线(store / 面板 / 高亮图层)尚未做。1 parent dc3df3c commit 8015568
4 files changed
Lines changed: 1022 additions & 1 deletion
File tree
- scripts
- src/modules/map/services
- __fixtures__
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
| 44 | + | |
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| |||
0 commit comments