Open Source Routing Machine - C++ backend
Go to file
Daniel J. Hofmann 2351b5a084 Merges node-osrm into repository
Build with

    cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=On -DENABLE_MASON=On
2017-03-21 20:10:39 +00:00
.github Revert "Add simple code review checklist to PR template." 2016-12-06 17:21:38 -08:00
cmake Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
docker Configure Dockerfile for integration with Docker Cloud/Dockerhub for (#3850) 2017-03-21 12:53:12 -07:00
docs Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
example Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
features Add read-only max_turn_weight in ProfileProperties 2017-03-20 20:06:51 +01:00
fuzz Enable data flow guided fuzzing using traces 2016-08-19 13:59:59 +02:00
include Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
lib Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
profiles Added bus_trap and sump_buster to barrier whitelist for bicycle profile 2017-03-10 23:09:27 +00:00
scripts Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
src Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
test Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
third_party Updates sol2 to v2.15.8, resolves #3733 2017-02-20 10:11:18 +00:00
unit_tests Merges node-osrm into repository 2017-03-21 20:10:39 +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
.gitignore Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
.gitmodules Removing Docs submodule 2012-12-26 18:29:16 +01:00
.npmignore Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
.travis.yml Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
appveyor-build.bat Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
appveyor.yml Enable npm and library tests on windows 2017-01-03 10:24:48 +01:00
build-local.bat Updated cmake version to 3.7.0-rc2 2016-10-28 12:42:36 -07:00
CHANGELOG.md Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
CMakeLists.txt Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
codecov.yml Fix codecov.yml 2016-05-12 17:56:40 +02:00
CONTRIBUTING.md [skip ci] Added info to CONTRIBUTING.md about automatic format checks 2017-01-04 17:31:58 +01:00
cucumber.js Added traffic tests to MLD testing 2017-03-17 13:20:33 +01: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 Merges node-osrm into repository 2017-03-21 20:10:39 +00:00
README.md Adds Docker Instructions to Readme 2017-03-01 20:21:26 +00:00
taginfo.json Supports destination:street, resolves #3541 2017-01-13 11:07:01 +05:30

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.

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 backend is to use Docker images we provide.

Using Docker

We base the Docker images on Alpine Linux and make sure they are as lightweight as possible (around 10-15 MB). In the following, replace X.Y.Z with the current stable release version.

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

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

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

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

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