Ubuntu 16.04 で OpenStreetMap タイルサーバを構築 – 1 –

目次

Google Map や Bing Map など で地図位置サービスを提供しているのはよく利用していますよね。

これらの地図情報について、単純に地図を使って場所を探す時や、行先案内のように使う場合には、

特にライセンスのことを気にしなくても問題はないのですが、

こと GPSなどの端末を取り付けて位置情報を拾っていく仕組みに採用しようとすると

フリーライセンスから大概のサービスが外れて、プレミアム 契約 に してね $500/月

という何とも 無情な サーバへの付加とか考慮すると妥当な金額を提示されるのです。

そこで、代替え方法はないかと いろいろつついてみると OpenStreetMap というサービスがあって

タイル サーバを自前で用意すれば地図情報提供するよ 的な使用方法が可能なようなのでトライしてみます。

元の内容はこちらから をほぼそのままやっています。

https://www.linuxbabe.com/linux-server/openstreetmap-tile-server-ubuntu-16-04

元記事の 更新日2016/07/22 By: Xiao Guoan 氏

OpenStreetMap、別名、OSM は自由に編集可能なユーザー貢献した世界地図です。

このチュートリアルでは、Ubuntu 16.04 で OpenStreetMap タイル サーバーを構築する方法を示します。

2 GB の RAM、40 GB のディスク容量は、OpenStreetMap サーバーの最小要件をする必要があります。

と言っているので、先ずは  さくらVPS 上で Ubuntu 16.04 を用意しました。

RAM : 1GB  ディスク100GB でも大丈夫でしょうか? 結果は後程。

ステップ1:

ソフトウェア アップデート

sudo apt update
sudo apt upgrade

ステップ2:

PostgreSQL データベース サーバーと PostGIS

地図データの格納にPostgreSQL を使用します。

PostGIS は PostgreSQL に地理空間情報を拡張します。

それらをインストールするコマンドを次のように実行します。

sudo apt install postgresql postgresql-contrib postgis postgresql-9.5-postgis-2.2

postgres という名前のユーザーは、インストール プロセス中に作成されます。
これらは Peer 認証を使用します。
postgres ユーザー に切り替えます。

sudo -u postgres -i

osm という PostgreSQL データベースユーザーを作成します。

createuser osm

osm が所有者 で 文字コードエンコーディング がUTF8 のgis という名前のデータベースを作成します。

createdb -E UTF8 -O osm gis

・・失敗します。UTF8 なんてエンコーディング設定知らないって。

ここを参考に

pg_lsclusters コマンドでステータスを見る

pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.5 main 5433 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

pg_dropcluster コマンドでクラスタ削除

pg_dropcluster --stop 9.5 main

pg_createcluster コマンドで クラスタ作成

cd /var/lib/postgresql

pg_createcluster --start --local C -e UTF8 9.5 main

設定ファイルの修正

cd /etc/postgresql/9.5/main

vi postgresql.conf

postgresql.conf の修正

# - Connection Settings -
listen_addresses = '*'
#listen_addresses = 'localhost' # what IP address(es) to listen on;

postgres ユーザーを抜けます。

exit

PostgreSQL の再起動

sudo /etc/init.d/postgresql restart

もう一度 ステータス確認

 pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.5 main 5432 down postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

なんか落ちてる・・。

postgres ユーザーを抜けて 再起動

sudo shutdown -r now

再起動したら

postgres ユーザー に切り替えます。

sudo -u postgres -i

もう一度 ステータス確認

 pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.5 main 5432 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

osm が所有者 で 文字コードエンコーディング がUTF8 のgis という名前のデータベースを作成します。

createdb -E UTF8 -O osm gis

今度は成功

hstore と postgis エクステンションを作成します。

psql -c "CREATE EXTENSION hstore;" -d gis
psql -c "CREATE EXTENSION postgis;" -d gis

postgres ユーザを抜けます

exit

タイルサービスを実行する osm ユーザーを作成します。

sudo adduser osm

ステップ3:

マップスタイルシートとマップデータのダウンロード

osm ユーザーに切り替えます。

su - osm

osm ユーザーの ホームディレクトリにCartoCSS マップ スタイスシートをダウンロードします。

wget https://github.com/gravitystorm/openstreetmap-carto/archive/v2.41.0.tar.gz

展開します

tar xvf v2.41.0.tar.gz

続いて、マップデータ を osm ユーザーの ホームディレクトリにダウンロードします。

マップデータ planet (32G)

wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf

必要な国・地域のでマップを取得するためには http://download.geofabrik.de または

BBBuke.org などから ダウンロードできます。

例として、日本のマップデータをダウンロードします (1G)

wget -c http://download.geofabrik.de/asia/japan-latest.osm.pbf

osm ユーザーから抜けます

exit

ステップ4:

PostgreSQL に マップデータをインポート

PostgreSQL データベースで postGIS を使えるように OpenStreetMap データをコンバートする osm2pgsql を インストールします。

sudo apt install osm2pgsql

osm ユーザーに切り替えます

su - osm

gis データーベースに マップスタイルシートと マップデータを読み込みます。

japan-latest.osm.pbf の部分はあなたの環境に読み替えてください。

osm2pgsql --slim -d gis -C 3600 --hstore -S openstreetmap-carto-2.41.0/openstreetmap-carto.style japan-latest.osm.pbf

osm2pgsql コマンドを実行するときのオプション指定には

-d で データベースを指定します

-C はキャッシュサイズです。 試している環境では 失敗しました

osm2pgsql --slim -d gis -C 1600 --hstore -S openstreetmap-carto-2.41.0/openstreetmap-carto.style japan-latest.osm.pbf

で 大丈夫そうです。
-s スタイルファイルを指定します
そして最後に 必要なマップデータファイルを指定します。

このインポート処理は非常に時間がかかります
先に SSH 接続保持時間の設定をsshの設定ファイルへ指定しておくことをお勧めします。

-- 2016/8/25 追記 --

Using 1 helper-processes

と表示されてから 24時間経過してもこのままなので

さすがに スペック不足ということで、この環境ではあきらめました。

今度は さくらクラウド 3GB 2コアで 挑戦してみます。

続きはこちら