In C++ geschriebene Hochleistungs-Routing-Engine, die für die Ausführung mit OpenStreetMap-Daten entwickelt wurde.
Die folgenden Dienste sind über die HTTP-API, die C++-Bibliotheksschnittstelle und den NodeJs-Wrapper verfügbar:
Um OSRM schnell auszuprobieren, nutzen Sie unseren Demoserver, der sowohl das Backend als auch ein Frontend enthält.
Eine kurze Einführung in die Darstellung des Straßennetzes in OpenStreetMap und die Kartierung bestimmter Merkmale des Straßennetzes finden Sie im OSM-Wiki zum Routing oder in dieser Anleitung zur Kartierung für die Navigation.
Verwandte Projekt-OSRM-Repositories:
irc.oftc.net
, Kanal: #osrm
(Webchat)https://lists.openstreetmap.org/listinfo/osrm-talk
Der einfachste und schnellste Weg, Ihre eigene Routing-Engine einzurichten, ist die Verwendung der von uns bereitgestellten Docker-Images.
Es stehen zwei Vorverarbeitungspipelines zur Verfügung:
Wir empfehlen die standardmäßige Verwendung von MLD, außer für spezielle Anwendungsfälle wie Matrizen mit sehr großen Distanzen, bei denen CH vorerst noch besser geeignet ist. Im Folgenden erklären wir die MLD-Pipeline. Wenn Sie stattdessen die CH-Pipeline verwenden möchten, ersetzen Sie osrm-partition
und osrm-customize
durch einen einzelnen osrm-contract
und ändern Sie die algorithm-Option für osrm-routed
in --algorithm ch
.
Wir basieren unsere Docker-Images (Backend, Frontend) auf Debian und stellen sicher, dass sie so leichtgewichtig wie möglich sind. Ältere Backend-Versionen finden Sie auf Docker Hub.
Laden Sie OpenStreetMap-Auszüge beispielsweise von Geofabrik herunter
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
Verarbeiten Sie den Extrakt mit dem Fahrzeugprofil vor und starten Sie einen HTTP-Server der Routing-Engine auf Port 5000
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-extract -p /opt/car.lua /data/berlin-latest.osm.pbf || echo "osrm-extract failed"
Das Flag -v "${PWD}:/data"
erstellt das Verzeichnis /data
innerhalb des Docker-Containers und stellt dort das aktuelle Arbeitsverzeichnis "${PWD}"
zur Verfügung. Die Datei /data/berlin-latest.osm.pbf
im Container verweist auf "${PWD}/berlin-latest.osm.pbf"
auf dem Host.
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-partition /data/berlin-latest.osrm || echo "osrm-partition failed"
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-customize /data/berlin-latest.osrm || echo "osrm-customize failed"
Beachten Sie, dass es keine berlin-latest.osrm
Datei gibt, sondern mehrere berlin-latest.osrm.*
Dateien, d. h. berlin-latest.osrm
ist kein Dateipfad, sondern ein „Basis“-Pfad, der sich auf eine Reihe von Dateien bezieht, und es gibt eine Option zum Weglassen dieses .osrm
Suffix vollständig (z. B. osrm-partition /data/berlin-latest
).
docker run -t -i -p 5000:5000 -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-routed --algorithm mld /data/berlin-latest.osrm
Stellen Sie Anfragen an den HTTP-Server
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
Starten Sie optional ein benutzerfreundliches Frontend auf Port 9966 und öffnen Sie es in Ihrem Browser
docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'
Falls sich Docker darüber beschwert, dass keine Verbindung zum Docker-Daemon hergestellt werden kann, stellen Sie sicher, dass Sie sich in der docker
-Gruppe befinden.
sudo usermod -aG docker $USER
Nachdem Sie sich der docker
-Gruppe hinzugefügt haben, melden Sie sich unbedingt mit Ihrem Terminal ab und wieder an.
Wir unterstützen die folgenden Images in der Container Registry:
Name | Beschreibung |
---|---|
latest | master mit Release-Flag kompiliert |
latest-assertions | master kompiliert mit Release-Flag, aktivierten Assertionen und Debug-Symbolen |
latest-debug | master mit Debug-Flag kompiliert |
<tag> | Spezifisches Tag, kompiliert mit Release-Flag |
<tag>-debug | Spezifisches Tag, kompiliert mit Debug-Flag |
Das Folgende zielt auf Ubuntu 22.04 ab. Anweisungen zum Erstellen auf verschiedenen Distributionen, macOS oder Windows finden Sie in unserem Wiki.
Abhängigkeiten installieren
sudo apt install build-essential git cmake pkg-config
libbz2-dev libxml2-dev libzip-dev libboost-all-dev
lua5.2 liblua5.2-dev libtbb-dev
Kompilieren und installieren Sie OSRM-Binärdateien
mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install
Lesen Sie die API-Nutzungsrichtlinie.
Einfache Abfrage mit Anleitungen und Alternativen zu Berlin:
curl "https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true"
Die Node.js-Bindungen bieten schreibgeschützten Zugriff auf die Routing-Engine. Wir stellen hier API-Dokumentation und Beispiele zur Verfügung.
Wenn Sie die vorgefertigten Binärdateien verwenden möchten, benötigen Sie aus Gründen der Binärkompatibilität eine moderne libstdc++
Toolchain ( >= GLIBCXX_3.4.26
). Für ältere Ubuntu-Systeme können Sie Ihre Standardbibliothek beispielsweise aktualisieren mit:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-9-dev
Sie können die Node.js-Bindungen über npm install @project-osrm/osrm
oder aus diesem Repository entweder über installieren
npm install
Dadurch werden vorgefertigte Binärdateien überprüft und verwendet, wenn sie für diese Version und Ihre Node-Version verfügbar sind, oder über
npm install --build-from-source
um immer die Erstellung der Node.js-Bindungen aus der Quelle zu erzwingen.
Vor v5.27.0 hatte das osrm
Node-Paket keinen Gültigkeitsbereich. Wenn Sie ein Upgrade von einem alten Paket durchführen, müssen Sie Folgendes tun:
npm uninstall osrm --save
npm install @project-osrm/osrm --save
Einzelheiten zur Verwendung finden Sie in diesen API-Dokumenten.
Eine beispielhafte Implementierung durch einen Drittanbieter mit Docker und Node.js finden Sie hier.
Bei Verwendung des Codes in einer (wissenschaftlichen) Publikation bitte zitieren
@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},
}