Motor de enrutamiento de alto rendimiento escrito en C++ diseñado para ejecutarse en datos de OpenStreetMap.
Los siguientes servicios están disponibles a través de API HTTP, interfaz de biblioteca C++ y contenedor NodeJs:
Para probar OSRM rápidamente, utilice nuestro servidor de demostración que viene con el backend y el frontend en la parte superior.
Para obtener una introducción rápida sobre cómo se representa la red de carreteras en OpenStreetMap y cómo mapear características específicas de la red de carreteras, consulte la wiki de OSM sobre rutas o esta guía sobre mapas para la navegación.
Repositorios relacionados de Project-OSRM:
irc.oftc.net
, canal: #osrm
(Webchat)https://lists.openstreetmap.org/listinfo/osrm-talk
La forma más fácil y rápida de configurar su propio motor de enrutamiento es utilizar las imágenes de Docker que proporcionamos.
Hay dos canales de preprocesamiento disponibles:
Recomendamos usar MLD de forma predeterminada, excepto en casos de uso especiales, como matrices de distancias muy grandes, donde CH sigue siendo mejor por el momento. A continuación explicamos el proceso de MLD. Si desea utilizar la canalización CH, reemplace osrm-partition
y osrm-customize
con un único osrm-contract
y cambie la opción de algoritmo para osrm-routed
a --algorithm ch
.
Basamos nuestras imágenes de Docker (backend, frontend) en Debian y nos aseguramos de que sean lo más livianas posible. Se pueden encontrar versiones de backend más antiguas en Docker Hub.
Descargue extractos de OpenStreetMap, por ejemplo, de Geofabrik
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
Preprocese el extracto con el perfil del automóvil e inicie un servidor HTTP del motor de enrutamiento en el puerto 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"
La bandera -v "${PWD}:/data"
crea el directorio /data
dentro del contenedor acoplable y hace que el directorio de trabajo actual "${PWD}"
esté disponible allí. El archivo /data/berlin-latest.osm.pbf
dentro del contenedor hace referencia a "${PWD}/berlin-latest.osm.pbf"
en el 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"
Tenga en cuenta que no hay un archivo berlin-latest.osrm
, sino varios archivos berlin-latest.osrm.*
, es decir, berlin-latest.osrm
no es la ruta del archivo, sino la ruta "base" que se refiere al conjunto de archivos y hay una opción para omitir este sufijo .osrm
completamente (por ejemplo, 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
Realizar solicitudes contra el servidor HTTP
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
Opcionalmente, inicie una interfaz fácil de usar en el puerto 9966 y ábrala en su navegador.
docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'
En caso de que Docker se queje de no poder conectarse al demonio de Docker, asegúrese de estar en el grupo docker
.
sudo usermod -aG docker $USER
Después de agregarse al grupo docker
, asegúrese de cerrar sesión y volver a iniciarla con su terminal.
Admitimos las siguientes imágenes en Container Registry:
Nombre | Descripción |
---|---|
latest | master compilado con bandera de lanzamiento |
latest-assertions | master compilado con bandera de lanzamiento, afirmaciones habilitadas y símbolos de depuración |
latest-debug | master compilado con bandera de depuración |
<tag> | etiqueta específica compilada con bandera de lanzamiento |
<tag>-debug | etiqueta específica compilada con indicador de depuración |
Lo siguiente está dirigido a Ubuntu 22.04. Para obtener instrucciones sobre cómo desarrollar diferentes distribuciones, macOS o Windows, consulte nuestra Wiki.
Instalar dependencias
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
Compilar e instalar binarios OSRM
mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install
Lea la política de uso de API.
Consulta sencilla con instrucciones y alternativas sobre Berlín:
curl "https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true"
Los enlaces de Node.js proporcionan acceso de solo lectura al motor de enrutamiento. Proporcionamos documentación API y ejemplos aquí.
Necesitará una cadena de herramientas libstdc++
moderna ( >= GLIBCXX_3.4.26
) para compatibilidad binaria si desea utilizar los archivos binarios prediseñados. Para sistemas Ubuntu más antiguos, puede actualizar su biblioteca estándar, por ejemplo, con:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-9-dev
Puede instalar los enlaces de Node.js a través de npm install @project-osrm/osrm
o desde este repositorio a través de
npm install
que comprobará y utilizará archivos binarios prediseñados si están disponibles para esta versión y su versión de Node, o mediante
npm install --build-from-source
para forzar siempre la construcción de los enlaces de Node.js desde la fuente.
Antes de v5.27.0, el paquete osrm
Node no tenía alcance. Si está actualizando desde un paquete antiguo, deberá hacer lo siguiente:
npm uninstall osrm --save
npm install @project-osrm/osrm --save
Para obtener detalles de uso, consulte estos documentos de API.
Puede encontrar una implementación ejemplar realizada por un tercero con Docker y Node.js aquí.
Cuando utilice el código en una publicación (científica), 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},
}