Open Source Routing Machine - C++ backend
Go to file
Daniel J. Hofmann 748fd3efa9
Remove lanes from roundabouts, closes #2626
After half a day of looking at the tagging and the data came to the
following conclusion:

We can't keep the user to the innermost / outermost lanes depending on
the exit the route takes: we found situations where both heuristics were
wrong.

Even on popular roundabouts the tagging is often wrong or in the best
case not present at all.

There are at least two different ways to interpret roundabout
indications: 1/ where e.g. a right arrow on the lane indicates turn
restrictions for the roundabout and the need to take this lane to exit
the roundabout to the right (possibly skipping multiple exits) and 2/
where a right arrow just means this is a lane in a immediate right turn.

Example: Australia marks lanes with arrows that seem to indicate
"angles you can exit the roundabout from", for example, these two ways:
- http://www.openstreetmap.org/way/320941710
- http://www.openstreetmap.org/way/42918021

Whereas Germany marks lanes with "directions you can travel in these
lanes immediately after entering the roundabout":
- http://www.openstreetmap.org/way/52578338

These two different interpretations of how to draw the arrows on the
roads mean we have conflicting solutions to "which lanes can you use to
take exit B from entry A" based on locality.

Continuing to tag ways based on lane markings is no problem, but
unfortunately, we can't reliably resolve good advice for navigation
system users (like "use the inside lane to take the second exit at the
roundabout"), there are too many situations that would generate bad
instructions (instructions that tell users to go into a lane they
shouldn't use).
2016-07-25 19:29:55 +02:00
cmake Fix various issues with pkg-config 2016-06-04 12:08:54 +02:00
docker [skip ci] Update docker files to gcc 5 2016-07-21 17:19:35 +02:00
docs move hardcoded road priorities into profiles, change road classification 2016-07-25 13:07:54 +02:00
example Use mmap instead of read - it's a lot faster here. 2016-06-27 17:24:30 -07:00
features Remove lanes from roundabouts, closes #2626 2016-07-25 19:29:55 +02:00
include Remove lanes from roundabouts, closes #2626 2016-07-25 19:29:55 +02:00
profiles move hardcoded road priorities into profiles, change road classification 2016-07-25 13:07:54 +02:00
scripts Show user hint on wrong Node.js version, fixes #2435. 2016-06-21 18:07:35 +02:00
src Remove lanes from roundabouts, closes #2626 2016-07-25 19:29:55 +02:00
test Add benchmark target to Makefile and save timings 2016-04-05 18:57:31 +02:00
third_party Rip out custom CSV parser code and its third_party dependency 2016-05-19 00:01:54 +02:00
unit_tests Use mmap instead of read - it's a lot faster here. 2016-06-27 17:24:30 -07:00
.clang-format expose lanes as enums, adjusted for comments 2016-06-27 11:12:02 +02:00
.clang-tidy Integration scripts for Clang's Modernize and Tidy tool. 2015-09-22 17:32:32 +02:00
.cncc.style Add simple cncc file 2016-01-05 12:06:33 +01:00
.eslintrc Rewrite cucumber test suite in JS 2016-03-24 16:01:01 -07:00
.gitignore Implement Turn Lane Api 2016-06-27 10:07:48 +02:00
.gitmodules Removing Docs submodule 2012-12-26 18:29:16 +01:00
.travis.yml Reenable ARM builds 2016-07-22 13:57:57 +02:00
appveyor-build.bat [skip travis] make AppVeyor publish binaries again 2016-04-29 10:32:29 +02:00
appveyor.yml Remove develop branch from appveyor 2016-04-23 17:55:18 +02:00
build-local.bat make AppVeyor work again 2016-03-31 16:49:30 +02:00
CHANGELOG.md move hardcoded road priorities into profiles, change road classification 2016-07-25 13:07:54 +02:00
CMakeLists.txt Change OSRM version to 5.3.0 2016-06-28 10:35:45 +02:00
codecov.yml Fix codecov.yml 2016-05-12 17:56:40 +02:00
CONTRIBUTING.md [skip ci] Add docs for contributing 2016-07-19 17:38:03 +02:00
cucumber.js adding tests for guidance 2016-04-08 10:43:22 +02:00
Doxyfile.in Exclude new node_modules folder that might be around if test cases have been run. 2016-04-05 22:59:14 +02:00
LICENCE.TXT We are at 2016 for the license 2016-01-04 18:13:05 +01:00
package.json update cucumber to 1.2.1 and remove hack 2016-07-13 11:04:35 +02:00
profile.lua readding profile.lua 2013-07-02 22:51:21 +02:00
README.md [skip ci] Fix example URLs in readme 2016-07-21 17:08:39 +02:00
taginfo.json basic turn lane handling 2016-06-27 10:07:41 +02:00

About

The Open Source Routing Machine is a high performance routing engine written in C++11 designed to run on OpenStreetMap data.

Current build status

build config status
Linux Build Status
Windows Build status
Coverage codecov

Building

For instructions on how to build and run OSRM, please consult the Wiki.

To quickly try OSRM use our free and daily updated online service

Documentation

Full documentation

Quick start

Building OSRM assuming all dependencies are installed:

mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
sudo cmake --build . --target install

Loading preparing a dataset and starting the server:

osrm-extract data.osm.pbf -p profiles/car.lua
osrm-contract data.osrm
osrm-routed data.osrm

Running a query on your local server:

curl http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true

Running a request against the Demo Server

First read the API usage policy.

Then run simple query with instructions and alternatives on Berlin:

curl https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true

References in publications

When using the code in a (scientific) publication, please cite

@inproceedings{luxen-vetter-2011,
 author = {Luxen, Dennis and Vetter, Christian},
 title = {Real-time routing with OpenStreetMap data},
 booktitle = {Proceedings of the 19th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems},
 series = {GIS '11},
 year = {2011},
 isbn = {978-1-4503-1031-4},
 location = {Chicago, Illinois},
 pages = {513--516},
 numpages = {4},
 url = {http://doi.acm.org/10.1145/2093973.2094062},
 doi = {10.1145/2093973.2094062},
 acmid = {2094062},
 publisher = {ACM},
 address = {New York, NY, USA},
}