概要
OSRMのサーバーはosrm-backendと呼ばれ,GitHubで提供されているほか,Docker Hubからイメージとしても提供されている1.そのため,ユーザーはこのイメージを用いることで,OSRMのサーバーを少ない手順で,任意の環境に構築できる.
OSRMのサーバーは対象地域を表現した専用のルーティングデータを入力として動作する.osrm-backendには,OSMの地図データをこのルーティングデータへ変換するためのプログラムが含まれている.ここでは,中部地方のデータを変換する例を用いて説明する.
データの用意
入力となるPBF形式の地図データはGeoFabrik(サービス)から取得できる.中部地方の場合は「chubu-latest.osm.pbf」という名前のファイルである.このファイルを任意のディレクトリに配置する.
次に,地図データを配置したディレクトリで,docker run
コマンドから,osrm-backendに含まれる3つのプログラムを順に実行する.実行するコマンドを次に示す.
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/foot.lua /data/chubu-latest.osm.pbf
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-partition /data/chubu-latest.osrm
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-customize /data/chubu-latest.osrm
ここで,実行されるプログラムはそれぞれ次の機能を持つものである.
osrm-extract
: 地図データからネットワークデータを抽出するosrm-partition
: ネットワークデータを複数のセルへ分割するosrm-customize
: すべてのセルの経路へ重みづけをおこなう また,osrm-extractにおいて,p
オプションで指定しているluaファイルは移動手段を表す.この例では,foot
(徒歩)を指定しているが,ほかにcar
(車),bike
(自転車)がある.
サービスの起動
データの変換が完了したら,次のコマンドでサービスを起動する.
docker run -t -i -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm=MLD /data/chubu-latest.osrm
このコマンドで実行されるOSRMのサービスは5000番のポートでリクエストを受け付ける.OSRMはデフォルトで5000番のポートでリクエストを受け付けており,ここでは,ホストの同じポートと対応付けている.
動作の確認
OSRMの動作を確認するには,クエリが正しく実行されるかを確認すればよい. OSRMでは,2点間の経路を求めるクエリは次のように記述する.ここで,lat1,lon1,lat2,lon2はそれぞれ各地点の経緯度を表す.
http://127.0.0.1:5000/route/v1/driving/[lat1],[lon1];[lat2],[lon2]?steps=true
これにしたがい,たとえば,愛知工業大学から名古屋城までの経路は次のクエリで確認できる.
http://127.0.0.1:5000/route/v1/driving/137.11299898,35.18357877;136.89962392,35.18493421?steps=true
このクエリをブラウザなどから,実行すると,JSON形式のデータが返される.このデータのはじめに"Ok"
というコードが含まれていれば,経路が正しく求められている.
Footnotes
-
Project-OSRM/osrm-backend: Open Source Routing Machine - C++ backend (GitHub), URL: https://github.com/Project-OSRM/osrm-backend ↩