GraphHopper is a fast and memory efficient Java road routing engine released under Apache License 2.0. Per default it uses OpenStreetMap data but can import other data sources.
See GraphHopper in action on GraphHopper Maps
GraphHopper Maps uses the Directions API for Business under the hood, which provides a Routing API via GraphHopper, a Route Optimization API via jsprit, a fast Matrix API and an address search via Photon. Additionally the map tiles from various providers are used where the default is Omniscale, and all is available for free, via encrypted connections and from German servers for a nice and private route planning experience!
There are subprojects to make GraphHopper working offline on Android and iOS
Read through our Documentation (0.6, unstable), ask questions on Stackoverflow and sign up to the discussion.
Read through how to contribute like finding and fixing bugs and improving our documentation or translations!
- Written in Java
- Open Source
- Memory efficient and fast
- Highly customizable
- Works on the desktop, as a web service and offline on Android or iOS
- Large test suite
GraphHopper supports several algorithms like Dijkstra and A* and its bidirectional variants. Furthermore it allows you to use Contraction Hierarchies (CH) very easily, we call this speed mode and in contrast to the speed mode we call everything without CH the flexibility mode. BTW: This does not mean that the flexibility mode is slow.
The speed mode comes with much faster and lightweight (less RAM) responses and it does not use heuristics. The downsides are that the speed mode allows only a pre-defined vehicle profile and requires a time consuming and resource intense preparation. And implementing certain features are not possible or very complex compared to the flexibility mode. But since 0.4 you can use both modes at the same time since. See here for more details.
Here is a list of the more detailed features including a link to the documentation:
- a web API including JavaScript and Java clients
- turn instructions in more than 30 languages, contribute or improve here
- including elevation (per default disabled)
- real time changes to edge weights (flexibility only)
- Customized routing profiles per request (flexibility only)
- A 'heading' for start, end and via points for navigation applications via pass_through or favoredHeading parameters (flexibility only)
- alternative routes (flexibility only)
- conditional access restrictions
- turn costs and restrictions (flexibility only)
- multiple profiles and weightings (flexibility and speed mode since 0.5)
- several pre-built routing profiles: car, bike, racingbike, mountain bike, foot, motorcycle
- map matching (flexibility only)