osrm-backend/README.md

131 lines
5.0 KiB
Markdown
Raw Normal View History

2017-01-02 09:41:15 -05:00
## Open Source Routing Machine
2017-01-02 09:41:15 -05:00
| Linux / macOS | Windows | Code Coverage |
| ------------- | ------- | ------------- |
| [![Travis](https://travis-ci.org/Project-OSRM/osrm-backend.png?branch=master)](https://travis-ci.org/Project-OSRM/osrm-backend) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/4iuo3s9gxprmcjjh)](https://ci.appveyor.com/project/DennisOSRM/osrm-backend) | [![Codecov](https://codecov.io/gh/Project-OSRM/osrm-backend/branch/master/graph/badge.svg)](https://codecov.io/gh/Project-OSRM/osrm-backend) |
2017-01-02 09:41:15 -05:00
High performance routing engine written in C++14 designed to run on OpenStreetMap data.
2015-05-01 19:30:44 -04:00
2017-01-02 09:41:15 -05:00
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
2015-05-01 19:30:44 -04:00
2017-01-02 09:41:15 -05:00
To quickly try OSRM use our [demo server](http://map.project-osrm.org) which comes with both the backend and a frontend on top.
2016-07-28 05:01:51 -04:00
2017-01-02 09:41:15 -05:00
Related [Project-OSRM](https://github.com/Project-OSRM) repositories:
- [node-osrm](https://github.com/Project-OSRM/node-osrm) - Production-ready NodeJs bindings for the routing engine
- [osrm-frontend](https://github.com/Project-OSRM/osrm-frontend) - User-facing frontend with map. The demo server runs this on top of the backend
- [osrm-text-instructions](https://github.com/Project-OSRM/osrm-text-instructions) - Text instructions from OSRM route response
2017-03-01 05:32:52 -05:00
- [osrm-backend-docker](https://hub.docker.com/r/osrm/osrm-backend/) - Ready to use Docker images
## Documentation
### Full documentation
- [Hosted documentation](http://project-osrm.org)
- [osrm-routed HTTP API documentation](docs/http.md)
- [libosrm API documentation](docs/libosrm.md)
2017-01-02 09:41:15 -05:00
## Contact
2017-01-02 09:41:15 -05:00
- IRC: `irc.oftc.net`, channel: `#osrm` ([Webchat](https://webchat.oftc.net))
- Mailinglist: `https://lists.openstreetmap.org/listinfo/osrm-talk`
2017-01-02 09:41:15 -05:00
## Quick Start
2015-05-02 09:18:13 -04:00
2017-03-01 05:32:52 -05:00
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
2017-01-02 09:41:15 -05:00
The following targets Ubuntu 16.04.
For instructions how to build on different distributions, macOS or Windows see our [Wiki](https://github.com/Project-OSRM/osrm-backend/wiki).
2016-04-29 07:00:27 -04:00
2017-03-01 05:32:52 -05:00
Install dependencies
2015-05-02 09:18:13 -04:00
2017-01-02 09:41:15 -05:00
```bash
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
```
2016-04-29 07:00:27 -04:00
2017-03-01 05:32:52 -05:00
Compile and install OSRM binaries
2016-04-29 07:00:27 -04:00
2017-01-02 09:41:15 -05:00
```bash
2016-04-29 07:00:27 -04:00
mkdir -p build
cd build
2017-01-02 09:41:15 -05:00
cmake ..
2016-04-29 07:00:27 -04:00
cmake --build .
sudo cmake --build . --target install
```
2017-03-01 05:32:52 -05:00
Grab a `.osm.pbf` extract from [Geofabrik](http://download.geofabrik.de/index.html) or [Mapzen's Metro Extracts](https://mapzen.com/data/metro-extracts/)
2017-01-02 09:41:15 -05:00
```bash
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
```
2017-03-01 05:32:52 -05:00
Pre-process the extract and start the HTTP server
2016-04-29 07:00:27 -04:00
```
2017-01-02 09:41:15 -05:00
osrm-extract berlin-latest.osm.pbf -p profiles/car.lua
osrm-contract berlin-latest.osrm
osrm-routed berlin-latest.osrm
2016-04-29 07:00:27 -04:00
```
2017-03-01 05:32:52 -05:00
Running Queries
2016-04-29 07:00:27 -04:00
```
2017-01-02 09:41:15 -05:00
curl http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true
2016-04-29 07:00:27 -04:00
```
2017-03-01 05:32:52 -05:00
### Request Against the Demo Server
2017-01-02 09:41:15 -05:00
Read the [API usage policy](https://github.com/Project-OSRM/osrm-backend/wiki/Api-usage-policy).
Simple query with instructions and alternatives on Berlin:
2016-04-29 07:00:27 -04:00
```
2016-07-21 11:08:39 -04:00
curl https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true
2016-04-29 07:00:27 -04:00
```
## 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},
}
```