GraphHopper 是根據 Apache License 2.0 發布的快速且記憶體高效的路由引擎。它可以用作 Java 庫或獨立的 Web 伺服器來計算兩個或多個點之間的路線的距離、時間、路線規劃指令和許多道路屬性。除了「A-B」路線之外,它還支援「捕捉道路」、等時線計算、移動導航等。 GraphHopper預設使用OpenStreetMap和GTFS數據,它也可以匯入其他資料來源。
我們有一個開放的社區,歡迎所有人。讓我們知道您的問題、用例或只是打個招呼。請參閱我們的社群準則。
所有問題都請訪問我們的論壇,其中我們還有專門針對開發人員、行動使用和地圖匹配組件的小節。您也可以在 Stackoverflow 中搜尋答案。
閱讀我們的貢獻指南,了解有關查找和修復錯誤以及改進我們的文件或翻譯等主題的資訊!我們也有很好的第一期來開始貢獻。
首先,您可以嘗試 GraphHopper Maps,閱讀我們的文件並在本機上安裝 GraphHopper(包括地圖 UI)。
請參閱 Java API 更改的更改日誌檔案。
要在本機安裝 GraphHopper Maps UI 和 Web 服務,您需要 JVM (>= Java 17) 並執行下列操作:
wget https://repo1.maven.org/maven2/com/graphhopper/graphhopper-web/10.0/graphhopper-web-10.0.jar
https://raw.githubusercontent.com/graphhopper/graphhopper/10.x/config-example.yml
http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
java -D " dw.graphhopper.datareader.file=berlin-latest.osm.pbf " -jar graphhopper * .jar server config-example.yml
一段時間後,您會看到一條帶有「伺服器 - 已啟動」的日誌訊息,然後造訪 http://localhost:8989/,您將看到柏林的地圖。您應該能夠右鍵單擊地圖來創建路線。
請參閱包含海拔指南和部署指南等的文件。
社群從master
分支建立的 Docker 映像可以在這裡找到(目前每天)。有關更多詳細信息,請參閱 Dockerfile。
若要查看 GraphHopper 的道路路由功能的實際應用,請造訪 GraphHopper 地圖。
GraphHopper Maps 是一個開源使用者介面,您可以在此處找到。它可以使用這個開源路由引擎或GraphHopper Directions API,它提供路由API、路由優化API(基於jsprit)、快速Matrix API和位址搜尋(基於photon)。光子計畫也得到了 GraphHopper GmbH 的支持。除了 GraphHopper Directions API 之外,還使用來自各個提供者的地圖圖塊,預設為 Omniscale。
所有這些都是透過加密連線和德國伺服器免費提供的 - 以獲得美好而私人的路線規劃體驗!
開始使用
我們的導航 Android 用戶端可以使用一個 Web 服務。
離線路由不再受到官方支持,但應該仍然可以工作,因為 Android 支援大多數 Java。請參閱版本 1.0 的 Android 演示,也請參閱 iOS 分支的拉取請求,包括 iOS 演示。
使用等時線來計算和視覺化特定出行模式的可到達區域。
您可以嘗試使用 http://localhost:8989/maps/isochrone 上的偵錯使用者介面來查看/isochrone
和/spt
端點的運行情況。
有一個地圖匹配子專案可以將 GPX 軌跡捕捉到道路上。
GraphHopper 支援多種路由演算法,例如 Dijkstra 和 A *
及其雙向變體。此外,它允許您非常輕鬆地使用收縮層次結構(CH)。我們稱之為速度模式;如果沒有這個CH準備,我們稱之為靈活模式。
速度模式具有非常快速且輕量級(較少 RAM)的響應,並且不使用啟發式方法。然而,只能預先定義車輛配置文件,而這種額外的 CH 準備工作非常耗時且資源消耗。
然後是混合模式,它也需要更多的時間和記憶體來進行準備,但它在更改每個請求的屬性或整合流量資料方面更加靈活。此外,這種混合模式比速度模式慢,但比靈活模式快一個數量級,並且對於一個請求使用更少的 RAM。
如果準備就緒,您可以根據請求在所有模式之間切換。
請在此處閱讀有關技術細節的更多資訊。
我們選擇 Apache 授權是為了讓您可以輕鬆地將 GraphHopper 嵌入到您的產品中,甚至是閉源產品中。我們建議您貢獻自己的更改,因為 GraphHopper 發展很快。
GraphHopper 直接支援 OpenStreetMap。如果沒有來自 OpenStreetMap 的驚人數據,GraphHopper 根本不可能實現。其他地圖資料將需要自訂匯入程序,請參閱 Ordnance Survey、Shapefile(如 ESRI 或 Navteq)。
GraphHopper 以 Java 編寫,正式運行在 Linux、Mac OS X 和 Windows 上。
透過以下程式碼片段將具有 OpenStreetMap 支援的 GraphHopper 嵌入到您的 Java 應用程式中:
< dependency >
< groupId >com.graphhopper</ groupId >
< artifactId >graphhopper-core</ artifactId >
< version >[LATEST-VERSION]</ version >
</ dependency >
請參閱我們的範例應用程式以快速入門。
您可以使用 Java 知識(具有進階和低階 API)來自訂 GraphHopper,也可以在沒有 Java 知識的情況下使用自訂模型。
透過 Web 模組,我們提供了透過 HTTP 查詢 GraphHopper 的程式碼,並盡可能減少頻寬使用。為此,我們使用高效的折線編碼、Ramer–Douglas–Peucker 演算法和簡單的 GZIP servlet 過濾器。
在客戶端,我們提供了Java和JavaScript客戶端。
GraphHopper 還可以在桌面上以 Java 應用程式運行,無需訪問互聯網。出於調試目的,GraphHopper 可以產生向量圖塊,即瀏覽器中道路網絡的可視化(請參閱#1572)。此外,工具模組中還透過 MiniGraphUI 提供了一個更底層的基於 Swing 的 UI,請參閱此處使用它完成的一些視覺化。可以透過mapsforge或mapsforge vtm實現快速且可用於生產的桌面地圖視覺化。