関連して以下も参考にしてください
- [初めて地図周りの技術に触れた時に作ったまとめ資料 - Qiita] (http://qiita.com/laqiiz/items/7d256108920ff7afbf08)
OSRMとは
OSRM(Open Source Routing Machine)はフリーの経路検索アプリです。
GoogleMapは非常に便利ですが、利用回数に制限があるため大量検索を行う場合はこちらの構築も検討してみてはどうでしょうか?
インストール内容
- OSRMのバックエンドモジュールのみインストールします
- なのでトップにあるような地図画像は残念ながら今回は出力できません(無念です)
環境情報
Ubuntu14.10を用います。
ちなみにCPUはハイパースレッディング込みで8コアのパワーがあるのを用います。
バージョン情報
% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.10
DISTRIB_CODENAME=utopic
DISTRIB_DESCRIPTION="Ubuntu 14.10"
# 手順
参考情報のサイト通り進めました。
## 依存パッケージ
```sh:依存パッケージインストール
sudo apt-get install build-essential git cmake pkg-config libprotoc-dev libprotobuf8 \
protobuf-compiler libprotobuf-dev libosmpbf-dev libpng12-dev \
libbz2-dev libstxxl-dev libstxxl-doc libstxxl1 libxml2-dev \
libzip-dev libboost-all-dev lua5.1 liblua5.1-0-dev libluabind-dev libluajit-5.1-dev libtbb-dev
OSRMダウンロード
% mkdir ~/osrm
% cd osrm
% git clone https://github.com/Project-OSRM/osrm-backend.git
OSRMのビルド
% cd osrm-backend
% mkdir -p build
% cd build
% cmake ..
% make
地図情報の取得
Open Street Mapから日本に絞って地図情報を取得します。
以下のサイトにアクセスしてダウンロードするURLをメモします。
(結構サイズが大きいので、直接wgetします)
asia > japan のデータを選択します
# サーバにDL
wget http://download.geofabrik.de/asia/japan-latest.osm.pbf
地図情報pbfを変換
少し時間がかかって5分位要しました。
# pbfのデータをosrmが認識する形式に変換
% ln -s osrm-backend/profile.lua
% ls -s osrm-backend/lib
% ln -s osrm-backend/build/osrm-extract
% ln -s osrm-backend/build/osrm-prepare
# 変換実行
# Extracting the Road Network
./osrm-extract data/japan-latest.osm.pbf
ルーティング計算
これが無茶苦茶時間かかりました。
2-3時間オーダで放ったらかししていたら終わっていたぐらいです。
# Creating the Hierarchy
# extractingで作ったデータを指定するようです
% ./osrm-prepare data/japan-latest.osm
起動
# Running the Engine
nohup ./osrm-routed data/japan-latest.osrm &
疎通確認
サーバにアクセスして疎通します。
デフォルトポートは5000です。
{"mapped_coordinate":[35.658356,139.745087],"status":0}
ステータスは正常終了が0みたいです。
locateはどういうAPIかというと、取り込んだ地図情報で最も近いノードを返してくれるようです。
参考情報
基本的に本家のWiki通り進めたらうまくいきました
https://github.com/Project-OSRM/osrm-backend/wiki/Building-on-Ubuntu
https://github.com/Project-OSRM/osrm-backend/wiki/Building-OSRM
https://github.com/Project-OSRM/osrm-backend/wiki/Running-OSRM
今後
- 引き続きOSRMのAPIや仕様について調査しまとめていきます