Open Source Routing Machine - C++ backend
Go to file
2017-07-18 11:23:46 +02:00
.github Revert "Add simple code review checklist to PR template." 2016-12-06 17:21:38 -08:00
cloudformation Fix publishing node binaries 2017-03-30 20:12:07 +00:00
cmake Fixes line endings, related to #4235 2017-07-10 07:26:17 +00:00
docker Squashed 'third_party/rapidjson/' content from commit f54b0e47a 2017-06-02 09:35:53 +02:00
docs deprecate use-lane -- the information can be found in the intersections array 2017-07-18 11:23:46 +02:00
example Fixes line endings, related to #4235 2017-07-10 07:26:17 +00:00
features deprecate use-lane -- the information can be found in the intersections array 2017-07-18 11:23:46 +02:00
fuzz Enable data flow guided fuzzing using traces 2016-08-19 13:59:59 +02:00
include deprecate use-lane -- the information can be found in the intersections array 2017-07-18 11:23:46 +02:00
lib Revert "Skip cucumber tests for publish builds" 2017-04-11 22:33:38 +00:00
profiles Canonicalizes all OSM string list handling in the profiles 2017-07-12 22:09:01 +00:00
scripts Some osrm-runner fixes 2017-07-03 14:57:52 +00:00
src deprecate use-lane -- the information can be found in the intersections array 2017-07-18 11:23:46 +02:00
test Exposes EngineConfig system-wide limits in Node.js bindings, resolves #4226 2017-07-13 21:48:48 +00:00
third_party remove rapidjson gtest dep 2017-06-02 10:26:39 +02:00
unit_tests Switch from stxxl::vector to std::vector in extractor 2017-07-11 08:23:26 +00:00
.babelrc Restructure API docs so that they can be formatted with Docbox. (#3355) 2016-11-30 19:38:53 -08: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
.gitattributes [skip ci] Revert back gitattributes, was unrelated to OSX 2017-07-04 22:49:30 +00:00
.gitignore Ignore Visual Studio/Visual Studio Code related files 2017-07-03 14:42:51 +00:00
.gitmodules Squashed 'third_party/rapidjson/' content from commit f54b0e47a 2017-06-02 09:35:53 +02:00
.travis.yml Added STXXL configuration 2017-07-11 08:23:26 +00:00
appveyor-build.bat Fix Win tests by copying data explicitly to test/data 2017-03-28 12:08:49 +02:00
appveyor.yml Squashed 'third_party/rapidjson/' content from commit f54b0e47a 2017-06-02 09:35:53 +02:00
build-local.bat Updated cmake version to 3.7.0-rc2 2016-10-28 12:42:36 -07:00
CHANGELOG.md Bump version to 5.10 2017-07-11 08:25:57 +00:00
CMakeLists.txt Only enables -fopenmp in case the user wants stxxl 2017-07-17 19:19:10 +02:00
codecov.yml Enable coverage reports for unit_tests 2017-03-28 10:40:13 +00:00
CONTRIBUTING.md [skip ci] Added info to CONTRIBUTING.md about automatic format checks 2017-01-04 17:31:58 +01:00
cucumber.js Enable ManyToManySearch in MLD 2017-07-03 14:57:52 +00: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-lock.json Adds npm5 lockfile 2017-06-08 21:58:09 +00:00
package.json Bump version to 5.10 2017-07-11 08:25:57 +00:00
README.md example curl command needs quotes 2017-06-30 14:04:46 +00:00
taginfo.json Discards construction and proposed ways, resolves #4230 2017-07-10 10:34:20 +02:00
yarn.lock Runs yarn upgrade to sync yarn lockfile 2017-05-31 14:40:31 +02:00

Open Source Routing Machine

Linux / macOS Windows Code Coverage
Travis AppVeyor Codecov

High performance routing engine written in C++14 designed to run on OpenStreetMap data.

The following services are available via HTTP API, C++ library interface and NodeJs wrapper:

  • Nearest - Snaps coordinates to the street network and returns the nearest matches
  • Route - Finds the fastest route between coordinates
  • Table - Computes the duration of the fastest route between all pairs of supplied coordinates
  • Match - Snaps noisy GPS traces to the road network in the most plausible way
  • Trip - Solves the Traveling Salesman Problem using a greedy heuristic
  • Tile - Generates Mapbox Vector Tiles with internal routing metadata

To quickly try OSRM use our demo server which comes with both the backend and a frontend on top.

For a quick introduction about how the road network is represented in OpenStreetMap and how to map specific road network features have a look at this guide about mapping for navigation.

Related Project-OSRM repositories:

Documentation

Full documentation

Contact

  • IRC: irc.oftc.net, channel: #osrm (Webchat)
  • Mailinglist: https://lists.openstreetmap.org/listinfo/osrm-talk

Quick Start

The easiest and quickest way to setup your own routing engine is to use Docker images we provide.

Using Docker

We base our Docker images (backend, frontend) on Alpine Linux and make sure they are as lightweight as possible.

Download OpenStreetMap extracts for example from Geofabrik

wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf

Pre-process the extract with the car profile and start a routing engine HTTP server on port 5000

docker run -t -v $(pwd):/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/berlin-latest.osm.pbf
docker run -t -v $(pwd):/data osrm/osrm-backend osrm-contract /data/berlin-latest.osrm

docker run -t -i -p 5000:5000 -v $(pwd):/data osrm/osrm-backend osrm-routed /data/berlin-latest.osrm

Make requests against the HTTP server

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

Optionally start a user-friendly frontend on port 9966, and open it up in your browser

docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'

In case Docker complains about not being able to connect to the Docker daemon make sure you are in the docker group.

sudo usermod -aG docker $USER

After adding yourself to the docker group make sure to log out and back in again with your terminal.

We support the following images on Docker Cloud:

Name Description
latest master compiled with release flag
latest-assertions master compiled with with release flag, assertions enabled and debug symbols
latest-debug master compiled with debug flag
<tag> specific tag compiled with release flag
<tag>-debug specific tag compiled with debug flag

Building from Source

The following targets Ubuntu 16.04. For instructions how to build on different distributions, macOS or Windows see our Wiki.

Install dependencies

sudo apt install build-essential git cmake pkg-config \
libbz2-dev libstxxl-dev libstxxl1v5 libxml2-dev \
libzip-dev libboost-all-dev lua5.2 liblua5.2-dev libtbb-dev

Compile and install OSRM binaries

mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install

Grab a .osm.pbf extract from Geofabrik or Mapzen's Metro Extracts

wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf

Pre-process the extract and start the HTTP server

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

Running Queries

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

Request Against the Demo Server

Read the API usage policy. 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"

Using the Node.js Bindings

The Node.js bindings provide read-only access to the routing engine. We provide API documentation and examples here.

You will need a modern libstdc++ toolchain (>= GLIBCXX_3.4.20) for binary compatibility if you want to use the pre-built binaries. For older Ubuntu systems you can upgrade your standard library for example with:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-5-dev

You can install the Node.js bindings via npm install osrm or from this repository either via

npm install

which will check and use pre-built binaries if they're available for this release and your Node version, or via

npm install --build-from-source

to always force building the Node.js bindings from source.

For usage details have a look these API docs.

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},
}