@inproceedings{matthes2023accurate,
title={Accurate Bike Routing for Lane Prediction in GLOSA Apps via Infrastructure Reference Models},
author={Matthes, Philipp and Springer, Thomas and Jeschor, Daniel},
booktitle={2023 IEEE International Conference on Intelligent Transportation Systems (ITSC)},
pages={1--6},
year={2023},
organization={IEEE}
}
Welcome to our custom GraphHopper routing engine! This powerful routing engine allows you to calculate optimized routes and navigation instructions based on various transportation modes, such as driving, cycling, or walking.
The routing foundation is optimized for bicycles and is based on the Digitales Radverkehrsnetz (DRN) dataset of Hamburg. The DRN dataset is a collection of all bicycle paths in Hamburg and is provided by the Behörde für Verkehr und Mobilitätswende, (BVM).
In addition to the DRN support, this modified version of GraphHopper also supports DGM-10. To load both datasets, the original routing engine licensed under Apache License 2.0 was extended by plugins.
In this way, it is tailored for high-precision bike routing. We use this system for our navigation app for cyclists, to obtain highly precise routes for green light optimal speed advisory (GLOSA). However it can also be used for other purposes.
- Optimized Routing: Calculate the most efficient routes for bicycles in Hamburg using the DRN dataset.
- Multiple Transportation Modes: Choose between different transportation modes, including cycling, driving, and walking. You may also choose between different types of bicycles, such as city bikes, mountain bikes, or racing bikes.
- Turn-by-Turn Navigation: Get detailed navigation instructions for each step of the route.
- Customizable Routing Profiles: Customize the routing profiles to suit your specific needs and preferences.
- Fast and Scalable: Benefit from the speed and scalability of the GraphHopper routing engine.
- Many more: See the GraphHopper documentation for more features.
Here's an example of how to calculate a bike route using the GraphHopper-DRN API:
curl "http://localhost:8989/route?profile=bike_default&point=53.5511,9.9937&point=53.5449,10.0059"
This request calculates a bike route between the coordinates 53.5511,9.9937 and 53.5449,10.0059. For more examples and information, see the GraphHopper documentation.
We provide a Docker image for easy deployment. To get started, simply run the following command:
./run-drn.sh
You can also test with OSM data for Hamburg:
./run-osm.sh
The docker build
step will perform all necessary data preprocessing and routing database preheating. The final image is ready-to-use and can be started with docker run
. The routing engine will be available at http://localhost:8989
.
GraphHopper-DRN is released under the MIT License.
Philipp Matthes, Thomas Springer, Daniel Jeschor. Additional credit: Max Lorenz.
Python project responsible for conversions on used datasets and creation of intermediate datasets.
Tool to convert Hamburgs dataset "Digitales Radverkehrsnetz" (DRN) to the osm format. Done by mapping information as close as possible to osm equivalents.
If reverse oneway travel should be allowed it can be activated by setting an environmental variable:
ENABLE_TRAVELLING_ONEWAY=[true|false]
Should this be activated also the approach used can be set. Using the maxspeed setting currently requires an adjustment in graphhopper itself. If deactivated geometries for reverse directions will be created.
ONEWAY_TRAVEL_BY_SETTING_MAX_SPEED=[true|false]
Starting with a drn dataset in gml format and osm dataset go through all required steps to create a conflated dataset containing DRN data inside Hamburg and OSM data outside.
For debugging intermediary steps could also be executed manually. Conflation is done through the following steps:
osm_extract.py
prepares an osm dataset of the region outside Hamburg:- removes ways inside Hamburg
- cut ways on the boundary of HH and keep only the part outside
postgis_connector.py
finds matches between drn nodes close to border and osm waysconflation.py
conflates OSM dataset and transformed DRN dataset via the previously found matches