GraphHopper ist eine schnelle und speichereffiziente Routing-Engine, die unter der Apache-Lizenz 2.0 veröffentlicht wird. Es kann als Java-Bibliothek oder eigenständiger Webserver verwendet werden, um Entfernung, Zeit, Abbiegehinweise und viele Straßenattribute für eine Route zwischen zwei oder mehr Punkten zu berechnen. Über diese „A-nach-B“-Routenführung hinaus unterstützt es „Snap to Road“, Isochronenberechnung, mobile Navigation und mehr. GraphHopper verwendet standardmäßig OpenStreetMap- und GTFS-Daten und kann auch andere Datenquellen importieren.
Wir haben eine offene Community und heißen jeden willkommen. Teilen Sie uns Ihre Probleme und Anwendungsfälle mit oder sagen Sie einfach Hallo. Bitte beachten Sie unsere Community-Richtlinien.
Alle Fragen gehen an unser Forum, wo wir auch Unterabschnitte speziell für Entwickler, mobile Nutzung und unsere Kartenabgleichskomponente haben. Sie können Stackoverflow auch nach Antworten durchsuchen.
Lesen Sie unseren Beitragsleitfaden, um Informationen zu Themen wie dem Finden und Beheben von Fehlern und der Verbesserung unserer Dokumentation oder Übersetzungen zu erhalten! Wir haben auch gute erste Ausgaben, um mit dem Beitrag zu beginnen.
Um zu beginnen, können Sie GraphHopper Maps ausprobieren, unsere Dokumentation durchlesen und GraphHopper einschließlich der Maps-Benutzeroberfläche lokal installieren.
Informationen zu Java-API-Änderungen finden Sie in der Changelog-Datei.
Um die GraphHopper Maps-Benutzeroberfläche und den Webdienst lokal zu installieren, benötigen Sie eine JVM (>= Java 17) und gehen wie folgt vor:
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
Nach einer Weile sehen Sie eine Protokollmeldung mit „Server – Gestartet“, dann gehen Sie zu http://localhost:8989/ und Sie sehen eine Karte von Berlin. Sie sollten in der Lage sein, mit der rechten Maustaste auf die Karte zu klicken, um eine Route zu erstellen.
Sehen Sie sich die Dokumentation an, die z. B. den Höhenleitfaden und den Bereitstellungsleitfaden enthält.
Die von der Community erstellten Docker-Images aus dem master
-Zweig finden Sie hier (aktuell täglich). Weitere Informationen finden Sie in der Docker-Datei.
Um die Straßenrouting-Funktion von GraphHopper in Aktion zu sehen, gehen Sie bitte zu GraphHopper-Karten.
GraphHopper Maps ist eine Open-Source-Benutzeroberfläche, die Sie hier finden. Es kann diese Open-Source-Routing-Engine oder die GraphHopper Directions API verwenden, die die Routing-API, eine Routenoptimierungs-API (basierend auf jsprit), eine schnelle Matrix-API und eine Adresssuche (basierend auf Photon) bereitstellt. Das Photonenprojekt wird auch von der GraphHopper GmbH unterstützt. Zusätzlich zur GraphHopper Directions API werden Kartenkacheln verschiedener Anbieter verwendet, wobei der Standardwert Omniscale ist.
Das alles gibt es kostenlos, über verschlüsselte Verbindungen und von deutschen Servern – für ein schönes und privates Routenplanungserlebnis!
Fangen Sie an
Es gibt einen Webdienst, der von unserem Navigations-Android-Client genutzt werden kann.
Offline-Routing wird offiziell nicht mehr unterstützt, sollte aber weiterhin funktionieren, da Android den größten Teil von Java unterstützt. Sehen Sie sich Version 1.0 mit der Android-Demo an und sehen Sie sich auch diesen Pull-Request des iOS-Forks inklusive einer Demo für iOS an.
Verwenden Sie Isochronen, um die erreichbare Fläche für einen bestimmten Reisemodus zu berechnen und zu visualisieren.
Sie können die Debug-Benutzeroberfläche unter http://localhost:8989/maps/isochrone ausprobieren, um die Endpunkte /isochrone
und /spt
in Aktion zu sehen.
Es gibt das Unterprojekt „Kartenabgleich“, um GPX-Spuren auf der Straße zu erfassen.
GraphHopper unterstützt mehrere Routing-Algorithmen, wie Dijkstra und A *
sowie deren bidirektionale Varianten. Darüber hinaus können Sie Contraction Hierarchies (CH) ganz einfach nutzen. Wir nennen diesen Geschwindigkeitsmodus ; Ohne diese CH-Vorbereitung nennen wir es flexiblen Modus .
Der Geschwindigkeitsmodus bietet sehr schnelle und einfache Antworten (weniger RAM) und verwendet keine Heuristik. Allerdings sind nur vordefinierte Fahrzeugprofile möglich und diese zusätzliche CH-Vorbereitung ist zeit- und ressourcenintensiv.
Dann gibt es noch den Hybridmodus , der ebenfalls mehr Zeit und Speicher für die Aufbereitung benötigt, aber deutlich flexibler ist, was die Änderung von Eigenschaften pro Anfrage oder z. B. die Integration von Verkehrsdaten angeht. Darüber hinaus ist dieser Hybridmodus langsamer als der Geschwindigkeitsmodus, aber um eine Größenordnung schneller als der flexible Modus und benötigt weniger RAM für eine Anfrage.
Wenn die Vorbereitungen vorliegen, können Sie bei Bedarf zwischen allen Modi wechseln.
Lesen Sie hier mehr über die technischen Details.
Wir haben uns für die Apache-Lizenz entschieden, um es Ihnen zu erleichtern, GraphHopper in Ihre Produkte einzubetten, auch in Closed-Source-Produkte. Wir empfehlen Ihnen, Ihre Änderungen beizutragen, da sich GraphHopper schnell weiterentwickelt.
OpenStreetMap wird direkt von GraphHopper unterstützt. Ohne die erstaunlichen Daten von OpenStreetMap wäre GraphHopper überhaupt nicht möglich. Andere Kartendaten benötigen ein benutzerdefiniertes Importverfahren, siehe z. B. Ordnance Survey, Shapefile wie ESRI oder Navteq.
GraphHopper ist in Java geschrieben und läuft offiziell auf Linux, Mac OS X und Windows.
Betten Sie GraphHopper mit OpenStreetMap-Unterstützung über das folgende Snippet in Ihre Java-Anwendung ein:
< dependency >
< groupId >com.graphhopper</ groupId >
< artifactId >graphhopper-core</ artifactId >
< version >[LATEST-VERSION]</ version >
</ dependency >
Sehen Sie sich unsere Beispielanwendung an, um schnell loszulegen.
Sie können GraphHopper mit Java-Kenntnissen (mit einer High- und Low-Level-API) und auch ohne Java-Kenntnisse mithilfe der benutzerdefinierten Modelle anpassen.
Mit dem Webmodul stellen wir Code zur Abfrage von GraphHopper über HTTP bereit und reduzieren die Bandbreitennutzung so weit wie möglich. Dazu verwenden wir eine effiziente Polylinienkodierung, den Ramer-Douglas-Peucker-Algorithmus und einen einfachen GZIP-Servlet-Filter.
Auf der Clientseite stellen wir einen Java- und JavaScript-Client zur Verfügung.
GraphHopper läuft auch auf dem Desktop in einer Java-Anwendung ohne Internetzugang. Zu Debugging-Zwecken kann GraphHopper Vektorkacheln erzeugen, also eine Visualisierung des Straßennetzes im Browser (siehe #1572). Über MiniGraphUI im Tools-Modul wird außerdem eine Swing-basierte Benutzeroberfläche auf niedrigerer Ebene bereitgestellt. Einige damit erstellte Visualisierungen finden Sie hier. Eine schnelle und produktionsreife Kartenvisualisierung für den Desktop kann über Mapsforge oder Mapsforge vtm umgesetzt werden.