Skip to content

Commit 8015568

Browse files
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/check-architecture.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const rules = [
4141
// 这些是领域层:必须能脱离 React/Leaflet/store 被直接调用与测试
4242
appliesTo: (path) =>
4343
/^src\/modules\/[^/]+\/services\//.test(path) &&
44-
/(approach-beam|holding-geometry|papi-guidance|airport-outline|map-airport-parser|map-response-parsers|planned-route-parser|procedure-parser|geo|metar-decode)\.ts$/.test(
44+
/(approach-beam|holding-geometry|papi-guidance|airport-outline|map-airport-parser|map-response-parsers|planned-route-parser|procedure-parser|taxi-graph|geo|metar-decode)\.ts$/.test(
4545
path,
4646
),
4747
forbidden: new RegExp(

0 commit comments

Comments
 (0)