| 模塊 | 方案 | 理由 |
|---|---|---|
| 地圖 SDK | 高德 / 百度 / 腾讯 地圖 SDK | 國內地址覆蓋率高、提供定位/導航/自定義圖層 API、商業免費額度足夠 |
| 地鐵數據 | 城市開放數據 / 高德地鐵圖層 / 自維護 GeoJSON | 官方 SDK 多內置地鐵圖層,可直接 setMapCustomStyle 隱藏非地鐵要素 |
| 最短路徑 | Dijkstra / A* / 多模態擴展 | 站點數通常 < 500,單源最短路極快,可預計算換乘權重 |
| 架構 | MVVM + Repository + Offline-first | 數據本地緩存,離線可查地鐵圖;UI 狀態用 LiveData/Flow |
// 高德示例:自定義樣式隱藏道路、建築,僅保留地鐵
MapCustomStyleOptions options = new MapCustomStyleOptions()
.setStyleData(customStyleJson); // JSON 中將 road/building visibility 設為 off
aMap.setCustomMapStyle(options);
或直接使用 SDK 內置 setMapType(MAP_TYPE_NAVI) 並疊加地鐵圖層 aMap.showSubway()(部分 SDK 支援)。
type=地鐵站,取距離最近;WalkRouteOverlay / 導航 SDK 發起步行導航。// 圖結構
class Station { String id, name; Line line; List edges; }
class Edge { Station to; int time; int transfers; }
// 雙權重 Dijkstra:優先換乘少,次之時間短
PriorityQueue pq = new PriorityQueue<>(Comparator
.comparingInt(s -> s.transfers)
.thenComparingInt(s -> s.time));
站點坐標 + 連接關系,ProtoBuf 序列化約幾百 KB;station_id + line_id 為唯一鍵;showSubway() 無效。