Mecanismo de roteamento de alto desempenho escrito em C++ projetado para rodar em dados OpenStreetMap.
Os seguintes serviços estão disponíveis via API HTTP, interface de biblioteca C++ e wrapper NodeJs:
Para experimentar rapidamente o OSRM, use nosso servidor de demonstração, que vem com back-end e front-end na parte superior.
Para uma rápida introdução sobre como a rede rodoviária é representada no OpenStreetMap e como mapear características específicas da rede rodoviária, dê uma olhada no wiki do OSM sobre roteamento ou neste guia sobre mapeamento para navegação.
Repositórios relacionados do Projeto-OSRM:
irc.oftc.net
, canal: #osrm
(Webchat)https://lists.openstreetmap.org/listinfo/osrm-talk
A maneira mais fácil e rápida de configurar seu próprio mecanismo de roteamento é usar as imagens Docker que fornecemos.
Existem dois pipelines de pré-processamento disponíveis:
recomendamos usar MLD por padrão, exceto para casos de uso especiais, como matrizes de distância muito grandes, onde CH ainda é mais adequado por enquanto. A seguir explicamos o pipeline MLD. Se você quiser usar o pipeline CH, substitua osrm-partition
e osrm-customize
por um único osrm-contract
e altere a opção de algoritmo para osrm-routed
para --algorithm ch
.
Baseamos nossas imagens Docker (backend, frontend) no Debian e garantimos que sejam o mais leves possível. Versões de backend mais antigas podem ser encontradas no Docker Hub.
Baixe extratos do OpenStreetMap, por exemplo, do Geofabrik
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
Pré-processe a extração com o perfil do carro e inicie um servidor HTTP do mecanismo de roteamento na porta 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"
A sinalização -v "${PWD}:/data"
cria o diretório /data
dentro do contêiner docker e disponibiliza o diretório de trabalho atual "${PWD}"
lá. O arquivo /data/berlin-latest.osm.pbf
dentro do contêiner refere-se a "${PWD}/berlin-latest.osm.pbf"
no 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"
Observe que não há arquivo berlin-latest.osrm
, mas vários berlin-latest.osrm.*
, ou seja, berlin-latest.osrm
não é o caminho do arquivo, mas o caminho "base" referente ao conjunto de arquivos e há uma opção para omitir este sufixo .osrm
completamente (por exemplo, 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
Faça solicitações no servidor HTTP
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
Opcionalmente, inicie um front-end amigável na porta 9966 e abra-o em seu navegador
docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'
Caso o Docker reclame por não conseguir se conectar ao daemon do Docker, certifique-se de estar no grupo docker
.
sudo usermod -aG docker $USER
Depois de se adicionar ao grupo docker
, faça logout e login novamente com seu terminal.
Oferecemos suporte às seguintes imagens no Container Registry:
Nome | Descrição |
---|---|
latest | master compilado com flag de lançamento |
latest-assertions | master compilado com sinalizador de lançamento, asserções habilitadas e símbolos de depuração |
latest-debug | master compilado com sinalizador de depuração |
<tag> | tag específica compilada com sinalizador de lançamento |
<tag>-debug | tag específica compilada com sinalizador de depuração |
O seguinte é direcionado ao Ubuntu 22.04. Para obter instruções sobre como construir em diferentes distribuições, macOS ou Windows, consulte nosso Wiki.
Instalar dependências
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 binários OSRM
mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install
Leia a política de uso da API.
Consulta simples com instruções e alternativas sobre Berlim:
curl "https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true"
As ligações do Node.js fornecem acesso somente leitura ao mecanismo de roteamento. Fornecemos documentação e exemplos de API aqui.
Você precisará de um conjunto de ferramentas libstdc++
moderno ( >= GLIBCXX_3.4.26
) para compatibilidade binária se quiser usar os binários pré-construídos. Para sistemas Ubuntu mais antigos, você pode atualizar sua biblioteca padrão, por exemplo, com:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-9-dev
Você pode instalar as ligações do Node.js por meio de npm install @project-osrm/osrm
ou deste repositório por meio de
npm install
que verificará e usará binários pré-construídos se estiverem disponíveis para esta versão e sua versão do Node, ou via
npm install --build-from-source
para sempre forçar a construção das ligações do Node.js a partir da fonte.
Antes da v5.27.0, o pacote osrm
Node não tinha escopo. Se estiver atualizando de um pacote antigo, você precisará fazer o seguinte:
npm uninstall osrm --save
npm install @project-osrm/osrm --save
Para obter detalhes de uso, consulte estes documentos da API.
Uma implementação exemplar feita por terceiros com Docker e Node.js pode ser encontrada aqui.
Ao usar o código em uma publicação (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},
}