C++ で書かれた高性能ルーティング エンジンは、OpenStreetMap データ上で実行するように設計されています。
次のサービスは、HTTP API、C++ ライブラリ インターフェイス、および NodeJs ラッパーを介して利用できます。
OSRM をすぐに試すには、バックエンドとその上にフロントエンドの両方が付属するデモ サーバーを使用してください。
道路網が OpenStreetMap でどのように表現されるか、および特定の道路網のフィーチャをマッピングする方法についての簡単な説明については、ルーティングに関する OSM Wiki またはナビゲーション用のマッピングに関するこのガイドを参照してください。
関連プロジェクト - OSRM リポジトリ:
irc.oftc.net
、チャネル: #osrm
(Webチャット)https://lists.openstreetmap.org/listinfo/osrm-talk
独自のルーティング エンジンをセットアップする最も簡単かつ迅速な方法は、提供されている Docker イメージを使用することです。
使用できる前処理パイプラインは 2 つあります。
当面は CH の方が適している非常に長い距離行列などの特別な使用例を除き、デフォルトで MLD を使用することをお勧めします。以下では、MLD パイプラインについて説明します。代わりに CH パイプラインを使用する場合は、 osrm-partition
とosrm-customize
単一のosrm-contract
に置き換え、 osrm-routed
のアルゴリズム オプションを--algorithm ch
に変更します。
私たちは Docker イメージ (バックエンド、フロントエンド) を Debian に基づいており、可能な限り軽量であることを確認しています。古いバックエンド バージョンは Docker Hub で見つけることができます。
OpenStreetMap の抽出物を Geofabrik からダウンロードするなど
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
Node.js バインディングnpm install @project-osrm/osrm
経由で、またはこのリポジトリからインストールできます。
npm install
事前に構築されたバイナリがこのリリースと Node バージョンで利用可能かどうかを確認して使用します。または、
npm install --build-from-source
ソースからの Node.js バインディングの構築を常に強制します。
v5.27.0 より前では、 osrm
ノード パッケージは対象外でした。古いパッケージからアップグレードする場合は、次の操作を行う必要があります。
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},
}