OpenStreetMap 데이터에서 실행되도록 설계된 C++로 작성된 고성능 라우팅 엔진입니다.
HTTP API, C++ 라이브러리 인터페이스 및 NodeJs 래퍼를 통해 다음 서비스를 사용할 수 있습니다.
OSRM을 빠르게 사용해 보려면 백엔드와 프런트엔드가 모두 포함된 데모 서버를 사용하세요.
OpenStreetMap에서 도로망이 표현되는 방식과 특정 도로망 기능을 매핑하는 방법에 대한 간단한 소개를 보려면 경로에 대한 OSM 위키나 내비게이션 매핑에 대한 이 가이드를 살펴보세요.
관련 프로젝트-OSRM 저장소:
irc.oftc.net
, 채널: #osrm
(웹챗)https://lists.openstreetmap.org/listinfo/osrm-talk
자신만의 라우팅 엔진을 설정하는 가장 쉽고 빠른 방법은 우리가 제공하는 Docker 이미지를 사용하는 것입니다.
사용 가능한 두 가지 사전 처리 파이프라인이 있습니다.
CH가 당분간 더 적합한 매우 먼 거리 행렬과 같은 특별한 사용 사례를 제외하고는 기본적으로 MLD를 사용하는 것이 좋습니다. 다음에서는 MLD 파이프라인에 대해 설명합니다. 대신 CH 파이프라인을 사용하려면 osrm-partition
및 osrm-customize
단일 osrm-contract
로 바꾸고 osrm-routed
에 대한 알고리즘 옵션을 --algorithm ch
로 변경하세요.
우리는 Docker 이미지(백엔드, 프런트엔드)를 Debian을 기반으로 하며 가능한 한 가벼운지 확인합니다. 이전 백엔드 버전은 Docker Hub에서 찾을 수 있습니다.
예를 들어 Geofabrik에서 OpenStreetMap 추출 다운로드
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
자동차 프로필로 추출을 전처리하고 포트 5000에서 라우팅 엔진 HTTP 서버를 시작합니다.
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"
-v "${PWD}:/data"
플래그는 docker 컨테이너 내부에 /data
디렉토리를 생성하고 현재 작업 디렉토리 "${PWD}"
를 여기에서 사용할 수 있도록 만듭니다. 컨테이너 내부의 /data/berlin-latest.osm.pbf
파일은 호스트의 "${PWD}/berlin-latest.osm.pbf"
를 참조합니다.
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"
berlin-latest.osrm
파일은 없지만 여러 개의 berlin-latest.osrm.*
파일이 있습니다. 즉, berlin-latest.osrm
은 파일 경로가 아니지만 파일 세트를 참조하는 "기본" 경로이며 생략할 수 있는 옵션이 있습니다. 이 .osrm
접미사는 완전합니다(예: 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
HTTP 서버에 요청하기
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
선택적으로 포트 9966에서 사용자 친화적인 프런트엔드를 시작하고 브라우저에서 엽니다.
docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'
Docker가 Docker 데몬에 연결할 수 없다고 불평하는 경우 docker
그룹에 있는지 확인하세요.
sudo usermod -aG docker $USER
docker
그룹에 자신을 추가한 후 터미널에서 로그아웃했다가 다시 로그인하십시오.
Container Registry에서는 다음 이미지를 지원합니다.
이름 | 설명 |
---|---|
latest | 릴리스 플래그로 컴파일된 master |
latest-assertions | 릴리스 플래그, 어설션 활성화 및 디버그 기호로 컴파일된 master |
latest-debug | 디버그 플래그로 컴파일된 master |
<tag> | 릴리스 플래그로 컴파일된 특정 태그 |
<tag>-debug | 디버그 플래그로 컴파일된 특정 태그 |
다음은 Ubuntu 22.04를 대상으로 합니다. 다양한 배포판, macOS 또는 Windows에서 빌드하는 방법에 대한 지침은 Wiki를 참조하세요.
종속성 설치
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
OSRM 바이너리 컴파일 및 설치
mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install
API 사용 정책을 읽어보세요.
베를린에 대한 지침 및 대안이 포함된 간단한 쿼리:
curl "https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true"
Node.js 바인딩은 라우팅 엔진에 대한 읽기 전용 액세스를 제공합니다. 여기서는 API 문서와 예제를 제공합니다.
사전 빌드된 바이너리를 사용하려면 바이너리 호환성을 위해 최신 libstdc++
툴체인( >= GLIBCXX_3.4.26
)이 필요합니다. 이전 Ubuntu 시스템의 경우 다음과 같이 표준 라이브러리를 업그레이드할 수 있습니다.
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-9-dev
npm install @project-osrm/osrm
통해 또는 다음을 통해 이 저장소에서 Node.js 바인딩을 설치할 수 있습니다.
npm install
이 릴리스와 Node 버전에서 사용할 수 있는 경우 사전 빌드된 바이너리를 확인하고 사용합니다.
npm install --build-from-source
항상 소스에서 Node.js 바인딩을 강제로 빌드합니다.
v5.27.0 이전에는 osrm
Node 패키지의 범위가 지정되지 않았습니다. 이전 패키지에서 업그레이드하는 경우 다음을 수행해야 합니다.
npm uninstall osrm --save
npm install @project-osrm/osrm --save
사용법에 대한 자세한 내용은 이 API 문서를 참조하세요.
Docker 및 Node.js를 사용하여 타사에서 구현한 예시는 여기에서 확인할 수 있습니다.
(과학) 출판물에 코드를 사용할 때는 인용해 주세요.
@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},
}