Birthday and Stars

Previous Article

Today the GraphHopper routing engine turned 8 years. It has now over 2500 stars at GitHub and together we pushed over 4300 commits with contributions from over 80 contributors – thanks a lot! See here for the first commits and read the blog post about the new release 1.0.

Additionally we invested into our other open source project jsprit. jsprit was created in 2013 from Stefan and is a toolkit for solving rich traveling salesman and vehicle routing problems. It has now over 1000 stars and more than 2000 commits. Together with the GraphHopper routing engine the jsprit toolkit creates the foundation for the GraphHopper Route Optimization API, our commercial service to solve vehicle routing problems. This commercial part is mentioned here as it is important for the success, quality and sustainability of our open source projects.

GraphHopper Routing Engine Retrospect

What began as a solo development expanded to team work: multiple core developers and many contributors. 3 years ago I already wrote a small retrospect and let’s expand on it a bit. It was and is an impressive journey for me and I still enjoy it every day and I think this applies to the whole GraphHopper team.

In the beginning I played around with Dijkstra and OpenStreetMap data and wanted to have it in Java as I wanted to leave my C/C++ experience behind me. Doing this in Java was the first challenge to solve.

It took a few months and over 1 year and then I released version 0.1.

Later NopMap contributed elevation data improvements and other vehicle profiles, so not only car worked, but also routing for horses. Other profiles like foot and bike were added. Many bike profile improvements came and come from ratrun. With this help the new biking feature for the Directions API was launched even a bit earlier than Google Maps was able to provide directions for bikes in Germany & France. Of course we used and still use OpenStreetMap data and that is the reason we are still ahead of many others (:proud_smiley).

For several years the routing engine did not support turn restrictions. And even after this big feature was contributed from Karl, it was still not available for the so called speed-mode (Contraction Hierarchies). It is incredible hard to implement turn cost support for the speed-mode with a ‘normal’ “node-based” graph that we are using, i.e. junctions are nodes and the connections are the edges. And then luckily Andi was able to implement this. See this PR and the 0.12 release announcement for more details on this journey.

Turn restrictions and more general turn costs are supported since 0.12 also for the speed mode.

Michael and Stefan Holder implemented a fast and high quality Map Matching after I created an initial “very heuristic” version.

Map Matching Module

Michael also implemented the public transit module.

Public Transit Module

The Isochrone module, first a commercial feature, later open source, was created from Michael and me.

Isochrone Module

In 2018 we introduced a fully open source navigation feature for Android, including a demo app, forked from Mapbox and mainly developed from Robin (kurviger)

100% Open Source Navigation for Android.

Furthermore Robin improved the turn instructions, implemented round tours, the motorcycle vehicle profile and many more things.

Over the years we got 43 translations for the turn instructions – special thanks goes to Manfred and his team!

The UI was initially developed from me and was improved from others like fbonzon (Bikewithme) and Andi.

GraphHopper Maps our demo for world wide routing

There is now even a GraphHopper fork that does routing on rails.

The new 1.0 release will contain many improvements regarding elevation (from Michael Barry) and improvements useful for e.g. truck routing developed (from otbutz).

An exciting new feature for the 1.0 release will be a highly configurable routing.

Configurable routing that will likely appear in 1.0 soon.

Over the years our open source work was supported from Komoot, Deutsche Bahn, Talent Systems, GPSies, Geofabrik, curbside, Falk, BMW Car IT, Sidekix and kurviger. And last but not least from the GraphHopper GmbH. Thanks a lot!

Have a look into the older release announcements with many more unnamed contributions like from @jansoe, @clns or @devemux86:

  • 0.13 announcement (2019). We introduced snap preventions, additional road data like surfaces and a vector tiles endpoint for development.
  • 0.12 announcement (2019). We introduced turn restrictions for CH and public transit isochrones.
  • 0.11 announcement (2018). We introduced the isochrone endpoint, the navigation support, the public transit module supports now a real time support and switch to the dropwizard framework for the web API.
  • 0.10 announcement (2018). We introduced the path details and a big speed up for CH.
  • 0.9 announcement (2017). We introduced a public transit module, the spatial rules and a new hybrid mode, ie. a fast flexible routing.
  • 0.8 announcement (2016). We introduced a high quality map matching functionality.
  • 0.7 announcement (2016). We introduced a round tour feature and did a major refactoring.
  • 0.6 announcement (2016). We introduced alternative route calculation.
  • 0.5 announcement (2015). We introduced support for multiple vehicle profiles.
  • 0.4 announcement (2015). The speep-up and flexibility mode can be used on the same graph.
  • 0.3 announcement (2014). We introduced elevation support and for that the weight can be different for two directions of one edge. Also an iOS port was released.
  • 0.2 announcement (2013). We introduced the speed-mode (Contraction Hierarchy) and GPS-exact routing, before it was from junction to junction only.
  • 0.1 announcement (2013). After over 1 year we released the first public version even with an Android demo, but there were still many limitations.