Open Source Routing Machine - C++ backend
c-plus-pluscppcpp17isochronesmap-matchingopenstreetmaposmosrmroutingrouting-enginetraveling-salesman
This disables the `-flto` LTO flag by default since we're seeing segfaults in compiler lto plugins, binutils and linker errors again and again for various clang / gcc / binutils combinations. Pass `-DNEBALE_LTO` to `cmake` in order to re-enable LTO. LTO situation in short: - LTO does not work at all for gcc<4.9 - With gcc>=4.9 the "slim" LTO format is getting used dumping IR - Older binutils need LTO plugins which know how to read this IR - Recent binutils handle this format all by themselves - LLVM is more or less the same with some Clang versions segfaulting If you need the performance benefit of LTO, make sure your compiler and binutils are up to date and see for yourself if LTO builds work for you. References: - https://gcc.gnu.org/wiki/LinkTimeOptimizationFAQ - https://github.com/Project-OSRM/osrm-backend/pull/3481#issuecomment-270618997 - https://github.com/Project-OSRM/osrm-backend/issues/3501 - https://github.com/Project-OSRM/osrm-backend/issues/3441 (and a ton of other LTO tickets if you search for them) |
||
---|---|---|
.github | ||
cmake | ||
docker | ||
docs | ||
example | ||
features | ||
fuzz | ||
include | ||
profiles | ||
scripts | ||
src | ||
test | ||
third_party | ||
unit_tests | ||
.babelrc | ||
.clang-format | ||
.clang-tidy | ||
.cncc.style | ||
.eslintrc | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
appveyor-build.bat | ||
appveyor.yml | ||
build-local.bat | ||
CHANGELOG.md | ||
CMakeLists.txt | ||
codecov.yml | ||
CONTRIBUTING.md | ||
cucumber.js | ||
Doxyfile.in | ||
LICENCE.TXT | ||
package.json | ||
README.md | ||
taginfo.json |
Open Source Routing Machine
Linux / macOS | Windows | Code Coverage |
---|---|---|
![]() |
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:
- node-osrm - Production-ready NodeJs bindings for the routing engine
- osrm-frontend - User-facing frontend with map. The demo server runs this on top of the backend
- osrm-text-instructions - Text instructions from OSRM route response
Contact
- IRC:
irc.oftc.net
, channel:#osrm
(Webchat) - Mailinglist:
https://lists.openstreetmap.org/listinfo/osrm-talk
Quick Start
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
Documentation
Full documentation
Running a 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},
}