トラックの運賃計算やルート最適化に欠かせない経路検索エンジン「OSRM」。
しかし、日本全土のデータを扱おうとすると、メモリ不足やディスク容量不足で「Input/output error」が発生し、多くの人が挫折します。
本記事では、実際に発生したトラブルとその解決策を含めた、世界一確実な構築手順をまとめました。
1. サーバーの準備(ここが最大の難所)
OSRMで日本全土を処理するには、PCのスペック設定が重要です。
メモリ不足を「スワップ」で解決
メモリが16GB以上あっても、処理中には足りなくなることがあります。仮想的なメモリ(スワップ)を12GB作成します。
# スワップファイルの作成と有効化
sudo fallocate -l 12G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 確認
free -h
ディスク容量不足を解決
日本全土のデータ加工には一時的に膨大な容量が必要です。
もし途中で止まってしまったら、以下のコマンドでディスクを拡張します。
# パーティション拡張ツールのインストール
sudo apt update && sudo apt install -y cloud-guest-utils
# パーティションを最大まで広げる(sda 3 の間はスペース)
sudo growpart /dev/sda 3
sudo resize2fs /dev/sda3
# 20GB以上の空きがあるか確認
df -h .
2. OSRMのインストール
必要なツールを入れ、OSRMのプログラムをビルド(組み立て)します。
# 依存ライブラリのインストール
sudo apt install -y build-essential git cmake pkg-config \
libbz2-dev libxml2-dev libzip-dev libboost-all-dev \
lua5.2 liblua5.2-dev libtbb-dev libosmpbf-dev libpng-dev
# 本体のダウンロードとビルド
git clone --depth 1 --branch v5.27.1 [https://github.com/Project-OSRM/osrm-backend.git](https://github.com/Project-OSRM/osrm-backend.git)
cd osrm-backend && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j1 # メモリ消費を抑えるため「-j1」で実行
sudo make install
3. 日本全土の地図データを加工する
必ず ~/osrm-data という専用の作業ディレクトリを作りましょう。
mkdir -p ~/osrm-data && cd ~/osrm-data
# 最新の日本地図データをダウンロード
wget https://download.geofabrik.de/asia/japan-latest.osm.pbf
# 設定ファイルをリンク
ln -sf ~/osrm-backend/profiles/car.lua car.lua
ln -sf ~/osrm-backend/profiles/lib lib
# 【重要】データ加工の3ステップ
# 1. 抽出(数時間かかります)
osrm-extract japan-latest.osm.pbf -p car.lua
# 2. 分割
osrm-partition japan-latest.osrm
# 3. カスタマイズ
osrm-customize japan-latest.osrm
4. サーバーの起動とテスト
データが完成したら、サーバーを起動します。
osrm-routed --algorithm mld japan-latest.osrm
別のターミナルで、Pythonなどを使って http://localhost:5000 にリクエストを送れば、瞬時にトラックの走行距離が返ってきます!
まとめ:成功のコツ
- ディスクの空きは30GB以上確保する。
- スワップは必ず10GB以上設定する。
- エラーが出たら
rm -f japan-latest.osrm.*で一度掃除してからやり直す。
これであなた専用の、高速な経路検索サーバーの完成です!


コメント