用 C++ 編寫的高效能路由引擎,設計用於在 OpenStreetMap 資料上運作。
以下服務可透過 HTTP API、C++ 函式庫介面和 NodeJs 包裝器提供:
要快速嘗試 OSRM,請使用我們的演示伺服器,該伺服器帶有後端和頂部前端。
有關如何在 OpenStreetMap 中表示道路網路以及如何繪製特定道路網路功能的快速介紹,請參閱有關路線的 OSM wiki 或有關導航映射的指南。
相關項目-OSRM 儲存庫:
irc.oftc.net
,頻道: #osrm
(網路聊天)https://lists.openstreetmap.org/listinfo/osrm-talk
設定自己的路由引擎最簡單、最快的方法是使用我們提供的 Docker 映像。
有兩個可用的預處理管道:
我們建議預設使用 MLD,但特殊用例除外,例如非常大的距離矩陣,其中 CH 目前仍然更適合。下面我們解釋 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
群組後,請確保使用終端登出並重新登入。
我們在容器註冊表中支援以下鏡像:
姓名 | 描述 |
---|---|
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},
}