# GraphHopper

GraphHopper ist eine quelloffene Routing-Software, die als Bibliothek oder auch als Server benutzt werden kann. Wird GraphHopper als Server betrieben, stellt dieser eine HTTP-API und eine Web-Oberfläche namens GraphHopper Maps bereit. Die Bibliothek und der Server von GraphHopper sind in Java geschrieben.
Durch die Plattformunabhängigkeit von Java kann GraphHopper auf Windows, Linux, MacOS und weiteren unixoiden Systemen betrieben werden, darunter beispielsweise auch Android, iOS oder Einplatinencomputern, wie dem Raspberry Pi.
Standardmäßig wird GraphHopper mit Daten von OpenStreetMap für das Netzwerk der Straßen und Wege betrieben. Optional können Höhendaten der Shuttle Radar Topography Mission genutzt werden, um beispielsweise ein Höhenprofil der Route zu berechnen und anzuzeigen.
Die Apache-Lizenz erlaubt es, GraphHopper zu verändern und in freie sowie kommerzielle Produkte zu integrieren. Durch die Nutzung von OpenStreetMap-Daten und die Geschwindigkeit der Berechnungen ist GraphHopper eine mögliche Alternative zu den Routing-Funktionen in etablierten Kartendiensten wie etwa Google Maps oder Apple Maps.

## Anwendungen

Neben Punkt-zu-Punkt-Routing für verschiedene Verkehrsmittel bietet GraphHopper die Möglichkeit, Distanzmatrizen zu berechnen, die als Eingabe für das Problem des Handlungsreisenden (Traveling Salesman Problem) dienen können. Weitere Nutzungsmöglichkeiten sind:
* Fahrzeuge mittels Map Matching verfolgen: Gemessene GPS-Punkte auf das Straßennetz abbilden
* Unterstützung bei der Stadtplanung
* Simulation von Verkehr
* Berechnung von Erreichbarkeitskarten: Erreichbarkeit der Umgebung von einem Standort aus betrachtet
* Ökologisch effizientes Routing
* Routing in Gebäuden, wie etwa Lagerhallen
* Virtual-Reality-Spiele wie etwa Scotland Yard
* Verwendung in Wissenschaftlichen Arbeiten

## Daten und Algorithmen

GraphHopper bietet Implementationen verschiedener Algorithmen, darunter Dijkstra, A* und Bidirektionale Suche. Um das Erstellen einer Route auf langen Pfaden (auch über Kontinente hinweg) zu beschleunigen und um heuristische Ansätze zu vermeiden, benutzt GraphHopper standardmäßig sogenannte contraction hierarchies. Diese Technik wandelt das Straßennetz beim Einlesen der Rohdaten in eine hierarchische Datenstruktur um, die nötig ist, um das System sehr speichereffizient und schnell zu machen.
Konfigurieren lässt sich GraphHopper vor allem über sogenannte Profile. Diese bestimmen die Gewichtung einzelner Wege während der Routenberechnung und enthalten Informationen über Geschwindigkeiten und Standardwerte für Geschwindigkeitsbegrenzungen. Beispielsweise vermeiden Fahrrad-Profile Autobahnen, Auto-Profile vermeiden hingegen Fahrradwege. Neben standardmäßig vorhandenen Profilen ist es auch möglich, eigene zu erstellen.
Die Entwicklung von GraphHopper legt großen Wert auf Softwaretests, was eine Vielzahl von Unit- und Integrationstests einschließt. Die Version 1.0 wurde im Mai 2020 nach acht Jahren Entwicklung veröffentlicht.

## Nutzer

Nennenswerte Nutzer von GraphHopper sind unter anderem Rome2rio, Deutsche Bahn, Komoot, Gnome und Flixbus. Seit Februar 2015 ist GraphHopper eine der APIs auf der offiziellen Website von OpenStreetMap und Version 0.4 wurde kurz danach veröffentlicht.

## Unternehmen

Im Januar 2016 haben die Entwickler von GraphHopper und jsprit das Unternehmen GraphHopper GmbH in München gegründet. Weitere Büros gibt es in Berlin und Hoyerswerda.

### GraphHopper Directions API

Die kostenpflichtige GraphHopper Directions API der GraphHopper GmbH bietet folgende spezifische APIs an:
* Routing API
* Routing Optimierung API: Problem des Handlungsreisenden (Traveling Salesman Problem)
* Geocoding API: Geocodierung
* Map Matching API: Map Matching
* Isochrone API: Erreichbarkeitskarte
* Distance Matrix API: Distanzmatrizen
Bis auf die Routing Optimierung API und Distance Matrix API sind alle Schnittstellen auch in der quelloffenen Variante von GraphHopper enthalten.