ルート検索routinoをインストールする


はじめに

AWS EC2 上にUbuntu-16.04LTS上に、OpenStreetMapのデータを使って、ルート検索を行う routino を動作させるまでの設定です。
(追記)最新の Ubuntu-18.04LTS の設定手順に合わせて、タイプミスやバージョン等の表記を変更しました。

サーバの準備

AWS EC2 インスタンスの場合

インスタンス作成

今回は、t2.medium タイプを選んで、AWSのコンソール画面から起動しました。タイプ選択は「カン」です。

(追記)サーバ設定後は、swapファイル(1GB)を追加した t2.micro でも、ルート検索そのものは動作しています。どこまで耐えられるかは不明。

初期ログイン

ubuntu系は、起動時に設定した鍵ペアを使い、ユーザubuntuでログインします。

ssh -i XXXX.pem ubuntu@[ip address]

routinoの設定

初期更新

ログイン後とりあえずアップデート

sudo apt-get update 
sudo apt-get upgrade
sudo apt-get dist-upgrade

ミドルウェア類のインストール

  • 開発系ツール類
sudo apt-get install gcc make libc6-dev libz-dev libbz2-dev
sudo apt-get install libwww-perl liburi-perl libjson-pp-perl unzip
sudo apt-get install emacs 

emacsは私の好みです。

  • Webサーバ類
apt-get install apache2 cgi.pm

この次にPostgres+PostGISをインストールしましたが routino には不要です.
サクッと、「routinoの設定」まですっ飛ばしてください


  • データベースのインストール

Postgres+PostGIS とデータ変換ツール osm2pgsql

sudo apt-get install postgresql postgis osm2pgsql

データベース初期設定

$ sudo -i -u postgres
$ psql
psql (9.5.5)
Type "help" for help.
postgres=# \du
  <ロールの確認>
postgres=# CREATE ROLE gis LOGIN CREATEDB PASSWORD 'postgis';
postgres=# CREATE DATABASE osm;

ローカルからのDB認証方法を変更

/etc/postgresql/9.5/main/pg_hba.conf
# "local" is for Unix domain socket connections only
##local   all             all                                     peer
local   all             all                                     md5
$ sudo /etc/init.d/postgresql restart

POSTGISテンプレート設定

psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/spatial_ref_sys.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis_comments.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/rtpostgis.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/raster_comments.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/topology.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/topology_comments.sql
psql -d osm -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis.sql
psql -d osm -f /usr/share/postgresql/9.5/contrib/postgis-2.2/spatial_ref_sys.sql

この後、osm2pgsql でデータを登録


routino の設定

routino のビルド

http://www.routino.org/download/ から最新版をダウンロード

wget http://www.routino.org/download/routino-3.2.tgz

展開してビルド(コンパイル)

tar xvfz routino-3.2.tgz
cd routino-3.2/
make

routino の配置

公開するディレクトリにコピー

sudo mkdir /var/www/routino/www
sudo cp -a web/* /var/www/routino/www
sudo chown -R www-data:www-data /var/www/routino

leaflet/OpenLayersのインストール。

いずれも install.sh は古いので編集が必要です。

  • leaflet

routino-3.2 では、leafletのレガシーバージョン 0.7.7 を指定していて、install.sh を実行するだけです。

$ sudo ./install.sh

1.0.2 にしてしまいましたが、ルート検索結果の線が表示されないようです。0.7.3 に戻せば大丈夫かもしれません。(未確認)

  • OpenLayers

こちらは OpenLayers 2 を使います。

/var/www/routino/www/openlayers/install.sh
#!/bin/sh -x
version=2.13.1
# Download the file.
#wget http://openlayers.org/download/OpenLayers-$version.tar.gz
wget https://github.com/openlayers/ol2/releases/download/release-${version}/OpenLayers-${version}.tar.gz
# Uncompress it.
tar -xzf OpenLayers-$version.tar.gz
# Create a custom OpenLayers file
(cd OpenLayers-$version/build && python build.py ../../routino.cfg && cp OpenLayers.js ..)
# Copy the files.
cp -p  OpenLayers-$version/OpenLayers.js .
cp -pr OpenLayers-$version/img .
cp -pr OpenLayers-$version/theme .
# Delete the remainder
rm -rf OpenLayers-$version

OpenStreetMap データダウンロード&データ変換

日本全域のデータをダウンロードしてroutinoが扱えるように変換します。

下記のスクリプトを用意しておけば、データの更新は簡単です。もっとも、別のディレクトリで作成してコピーする手順にしないと、データ変換中は検索に失敗します。

/var/www/routino/data/create_japan.sh
#!/bin/sh -x
# This script can download from the GeoFabrik server.

# EDIT THIS to set the names of the files to download from GeoFabrik.
files="asia/japan-latest.osm.pbf"
server="download.geofabrik.de"

# Download the files
for file in $files; do
   wget -N http://$server/$file
done

# Process the data
../bin/planetsplitter --errorlog *.osm.pbf

地図パラメータ設定

デフォルトのままだとイギリス近辺しか表示されないので、表示範囲を変更します。
設定ファイル:/var/www/routino/www/routino/mapprops.js

$ diff mapprops.js mapprops.js.ORIG
17,18c17,18
< //  westedge:  -11.0,          // Minimum longitude (degrees)
< //  eastedge:    2.0,          // Maximum longitude (degrees)
---
>   westedge:  -11.0,          // Minimum longitude (degrees)
>   eastedge:    2.0,          // Maximum longitude (degrees)
20,21c20,21
< //  southedge:  49.5,          // Minimum latitude (degrees)
< //  northedge:  61.0,          // Maximum latitude (degrees)
---
>   southedge:  49.5,          // Minimum latitude (degrees)
>   northedge:  61.0,          // Maximum latitude (degrees)
23,29c23,24
<   westedge:  128.0,          // Minimum longitude (degrees)
<   eastedge:  145.0,          // Maximum longitude (degrees)
<   southedge:  26.0,          // Minimum latitude (degrees)
<   northedge:  45.5,          // Maximum latitude (degrees)
<
<   zoomout:       6,          // Minimum zoom
<   zoomin:       18,          // Maximum zoom
---
>   zoomout:       4,          // Minimum zoom
>   zoomin:       15,          // Maximum zoom

apacheの設定

まず、環境に応じて、apacheの設定ファイルの ServerAdmin / ServerName などを適切に設定してください。

つぎにCGIを有効化します。(Ubuntuの場合)

$ sudo a2enmod cgid

routinoに関する設定を行います。、VirtualHost を使ったサンプルですが、単にroutinoの設定をまとめて移設しやすくするために使っているだけです。

/etc/apache2/sites-available/routino.conf
###
#       for routine
#       hostname: routino.sample.com
####
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName routino.sample.com
    DocumentRoot /var/www/routino/www/

    <Directory /var/www/routino/www>
       AllowOverride None
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
       AddHandler cgi-script .cgi
   </Directory>

   CustomLog ${APACHE_LOG_DIR}/routino.access.log combined
   ErrorLog ${APACHE_LOG_DIR}/routino.error.log
   ServerSignature Off
</VirtualHost>

設定ファイルを反映させ、apacheを再起動

$ sudo ln -s /etc/apache2/sites-available/routino.conf /etc/apache2/sites-enabled/routino.conf
$ sudo systemctl restart apache2

(追記)1行目のシンボリックリンク作成は、a2ensite を使ったほうが便利。

動作確認

ブラウザでアクセスし本家( http://www.routino.org/uk/ ) と同様の画面が表示されることを確認する。
ルート検索ができない場合は、CGIが動作しない設定になっている、あるいは、OSMデータ変換に失敗しているなどの可能性が考えられる。

参考