在複雜路由解決方案占主導地位的時代,一個名為 US Routing 的輕量級 Python 庫成為了尋求美國境內更簡單路由解決方案的開發者的一股清流。這個基於北美道路資料集的庫,引發了開發者們關於其實際應用和潛在最佳化的討論。
![]() |
---|
US Routing 專案的 GitHub 倉庫截圖,展示了其程式碼和版本管理 |
複雜路由解決方案的輕量級替代品
US Routing 將自己定位為比 Graphhopper 和 OSRM 等更全面的路由引擎的輕量級替代品。當近似值可接受時,該庫能夠在美國境內實現快速的本地路由,這使其特別適用於那些使用更重量級解決方案可能過於複雜的簡單任務。
「不錯。與 Graphhopper、OSRM 等正規本地路由器相比非常輕量,而那些對於簡單任務來說可能有些過於龐大。」
其核心功能允許使用者計算城市、郵政編碼或座標之間的路線,提供總距離、持續時間和經過的州等詳細資訊。這種簡單性受到了尋求直接路由解決方案而不需要更復雜系統的開發者的歡迎。
美國路線規劃功能
- 美國地點之間的快速路線規劃(城市、郵政編碼或座標)
- 多種路線選擇(最短距離、最快時間)
- 詳細的路線資訊(距離、時間、途經州份)
- 基於北美道路資料集(公共領域)
- 透過 BaseRouter 類支援自定義路由器
- 覆蓋的道路類別:
- FREEWAY = 1(多車道,受控通行)
- PP_TH = 2(省/領地主要公路)
- SP_TH_MA = 3(省/領地次要公路/市政幹道)
技術實現和最佳化機會
該庫的路由實現基於 NetworkX 的 shortest_path 函式,該函式使用 Dijkstra 演算法。雖然功能齊全,但社群成員指出了潛在的效能最佳化。建議包括實現雙向 Dijkstra、A* 演算法或收縮層次結構,這些可能會顯著提高固定權重邊圖的效能。
開發者澄清,文件中提到的近似值並不是指最短路徑計算本身(使用 Dijkstra 演算法保證是最優的),而是指距離和時間估計。當在圖中不存在節點的點之間進行路由時,系統需要找到最近的可用節點,這時就會出現近似。
資料來源和可訪問性
US Routing 依賴於北美道路資料集,這是美國政府的作品,可供公眾無限制使用。該庫包含下載和處理這些資料的功能,儘管一些使用者報告在訪問原始資料集時因其格式而面臨挑戰。
一位社群成員發現了一個與專案相關的282MB SQLite 資料庫,但遇到了與 VSRS 模組的相容性問題,這似乎是 Esri 的專有元件。開發者和其他評論者有益地指出了資料集的替代下載選項,包括 CSV 和 shapefile 格式。
Python 版本要求和安裝挑戰
使用者之間的一個顯著討論點集中在庫的 Python 版本要求上。US Routing 特別需要 Python 3.11,這給使用不同版本的使用者帶來了安裝挑戰。這引發了關於使用 uv
和 pyenv
等工具管理 Python 環境而不影響系統範圍安裝的有益交流。
幾位社群成員提供了關於建立特定 Python 版本虛擬環境的詳細指導:
uv venv --python 3.11
這個命令使用 Python 3.11 建立虛擬環境,無需更改全域性 Python 安裝,允許使用者在可能使用不同 Python 版本的現有專案旁邊執行該庫。
覆蓋範圍和潛在擴充套件
當被問及該庫對城市內較短距離的覆蓋時,開發者解釋說,當前實現覆蓋了高達3級的道路等級,包括高速公路、主要省/領地公路和次要省/領地公路/市政幹道。開發者指出,該庫可以透過適當的資料集擴充套件以處理更細粒度的路由需求。
社群對 US Routing 的參與突顯了人們對專業化、輕量級工具的持續興趣,這些工具能夠有效解決特定問題,即使在由綜合解決方案和人工智慧驅動的替代方案主導的環境中也是如此。
參考:US Routing