Moteur de routage haute performance écrit en C++ conçu pour fonctionner sur les données OpenStreetMap.
Les services suivants sont disponibles via l'API HTTP, l'interface de bibliothèque C++ et le wrapper NodeJs :
Pour essayer rapidement OSRM, utilisez notre serveur de démonstration qui est livré avec à la fois le backend et un frontend.
Pour une introduction rapide sur la façon dont le réseau routier est représenté dans OpenStreetMap et sur la façon de cartographier des caractéristiques spécifiques du réseau routier, consultez le wiki OSM sur le routage ou ce guide sur la cartographie pour la navigation.
Dépôts Projet-OSRM associés :
irc.oftc.net
, canal : #osrm
(Webchat)https://lists.openstreetmap.org/listinfo/osrm-talk
Le moyen le plus simple et le plus rapide de configurer votre propre moteur de routage consiste à utiliser les images Docker que nous fournissons.
Deux pipelines de prétraitement sont disponibles :
nous recommandons d'utiliser MLD par défaut, sauf pour des cas d'utilisation particuliers tels que les matrices à très grande distance où CH est encore mieux adapté pour le moment. Dans ce qui suit, nous expliquons le pipeline MLD. Si vous souhaitez utiliser le pipeline CH, remplacez osrm-partition
et osrm-customize
par un seul osrm-contract
et modifiez l'option d'algorithme pour osrm-routed
en --algorithm ch
.
Nous basons nos images Docker (backend, frontend) sur Debian et veillons à ce qu'elles soient aussi légères que possible. Les anciennes versions du backend peuvent être trouvées sur Docker Hub.
Téléchargez par exemple des extraits OpenStreetMap de Geofabrik
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
Pré-traitez l'extrait avec le profil de la voiture et démarrez un serveur HTTP du moteur de routage sur le 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"
L'indicateur -v "${PWD}:/data"
crée le répertoire /data
à l'intérieur du conteneur Docker et y rend le répertoire de travail actuel "${PWD}"
disponible. Le fichier /data/berlin-latest.osm.pbf
à l'intérieur du conteneur fait référence à "${PWD}/berlin-latest.osm.pbf"
sur l'hôte.
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"
Notez qu'il n'y a pas de fichier berlin-latest.osrm
, mais plusieurs fichiers berlin-latest.osrm.*
, c'est-à-dire que berlin-latest.osrm
n'est pas un chemin de fichier, mais un chemin "de base" faisant référence à un ensemble de fichiers et il existe une option pour l'omettre. ce suffixe .osrm
complètement (par exemple 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
Faire des requêtes sur le serveur HTTP
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
Démarrez éventuellement une interface conviviale sur le port 9966 et ouvrez-la dans votre navigateur.
docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'
Dans le cas où Docker se plaindrait de ne pas pouvoir se connecter au démon Docker, assurez-vous que vous êtes dans le groupe docker
.
sudo usermod -aG docker $USER
Après vous être ajouté au groupe docker
, assurez-vous de vous déconnecter et de vous reconnecter avec votre terminal.
Nous prenons en charge les images suivantes dans Container Registry :
Nom | Description |
---|---|
latest | master compilé avec l'indicateur de version |
latest-assertions | master compilé avec l'indicateur de version, les assertions activées et les symboles de débogage |
latest-debug | master compilé avec l'indicateur de débogage |
<tag> | balise spécifique compilée avec l'indicateur de version |
<tag>-debug | balise spécifique compilée avec l'indicateur de débogage |
Ce qui suit cible Ubuntu 22.04. Pour obtenir des instructions sur la façon de créer sur différentes distributions, macOS ou Windows, consultez notre Wiki.
Installer les dépendances
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
Compiler et installer les binaires OSRM
mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install
Lisez la politique d'utilisation de l'API.
Requête simple avec instructions et alternatives sur Berlin :
curl "https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true"
Les liaisons Node.js fournissent un accès en lecture seule au moteur de routage. Nous fournissons ici de la documentation et des exemples d'API.
Vous aurez besoin d'une chaîne d'outils libstdc++
moderne ( >= GLIBCXX_3.4.26
) pour la compatibilité binaire si vous souhaitez utiliser les binaires prédéfinis. Pour les anciens systèmes Ubuntu, vous pouvez mettre à niveau votre bibliothèque standard par exemple avec :
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-9-dev
Vous pouvez installer les liaisons Node.js via npm install @project-osrm/osrm
ou depuis ce référentiel via
npm install
qui vérifiera et utilisera les binaires prédéfinis s'ils sont disponibles pour cette version et votre version de Node, ou via
npm install --build-from-source
pour toujours forcer la création des liaisons Node.js à partir des sources.
Avant la version 5.27.0, le package osrm
Node n'était pas étendu. Si vous effectuez une mise à niveau à partir d'un ancien package, vous devrez procéder comme suit :
npm uninstall osrm --save
npm install @project-osrm/osrm --save
Pour plus de détails sur l'utilisation, consultez ces documents API.
Un exemple d'implémentation par un tiers avec Docker et Node.js peut être trouvé ici.
Lorsque vous utilisez le code dans une publication (scientifique), veuillez citer
@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},
}