[MaaStep]OpenStreetMapのセットアップ[Ubuntu 16.04でやろうとしたらMapnikで詰んだ編]
2019-06-13
azblob://2022/11/11/eyecatch/2019-06-13-maastep-openstreetmap-setup-000-e1560755087240.jpg

はじめに

Azureを用いてMaaSに関するアプリの作成をしているときに作ったもの・触ったものを「MaaStep」としてタグをつけて紹介していく企画第2弾です。
前回はTerraformを使ってAzure VMをセットアップしました。
今回はいよいよOpenStreetMapのセットアップをしていきます。
参考にしたサイトはこちらです。

実行環境

リンクはインストール方法へのリンクです。

2. OpenStreetMapのセットアップ

2.0 目次

2.1 VMの起動とログイン[Azure Portal→コマンドプロンプト]
2.2 PostgreSQLとPostGISのインストール[コマンドプロンプト]
2.3 必要なパッケージのインストール[コマンドプロンプト]
2.4 OpenStreetMap用のデータベースの作成[コマンドプロンプト]
2.5 OpenStreetMapの標準的なCSSとOpenStreetMapデータをデータベースに格納[コマンドプロンプト]
2.6 Mapnikスタイルシートの生成[コマンドプロンプト] ← 今回失敗

2.1 VMの起動とログイン[Azure Portal→コマンドプロンプト]

前回たてたVMは停止させていたので、起動させます。
前回書くのを忘れてしまったのですが、停止状態にしておくと、課金が少なくなりますので、使わないときはVMを停止させておきましょう。

(1)前回作成したリソースグループ>VMを選択 (2)開始をクリック

VMが起動すると、パブリックIPアドレスが振られます。 そのパブリックIPアドレスを使って、コマンドプロンプトでVMにログインします。

ssh azureuser@xx.xx.xxx.xx

2.2 PostgreSQLとPostGISのインストール[コマンドプロンプト]

PostgreSQLとPostGISは以下のようなものです[1][2]。

  • PostgreSQL:オープンソースのリレーショナルデータベース管理システム
  • PostGIS:PostgreSQLの地理情報システムのための拡張モジュール。PostGISにより、地理情報のオブジェクトやそれを操作するための関数などが利用できるようになる

これらをインストールしていきます。

(1) VMのアップデート

以下のコマンドでVMにインストールされているパッケージを更新します。

sudo apt update

sudo apt upgrade
(2) 必要なパッケージのインストール

以下のコマンドでPostgreSQLとPostGISの構築で必要なものをすべてインストールします。
大体3分くらいかかりました。

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

特に問題がなければ、以下のようにErrorやWarningが出ずに終了します。

PostgreSQLサーバーのスーパーユーザー(パスワードはなし)はインストール中に自動で作成されます。

2.3 必要なパッケージのインストール[コマンドプロンプト]

OpenStreetMapデータをPostgreSQLデータベースで使えるように変換するosm2pgsqlパッケージもインストールします。
こちらは1分もかからずに終了します。

sudo apt install osm2pgsql

次に地図タイルを提供するために必要なApacheモジュールmod_tileをインストールしていきます。
まずはmod_tileをビルドするために必要なものをインストールします。
大体3分くらいで終わります。

sudo apt install git autoconf libtool libmapnik-dev apache2-dev

mod_tileをGithubからクローンし、コンパイルしてインストールしていきます。

git clone https://github.com/openstreetmap/mod_tile.git
cd mod_tile/
./autogen.sh
./configure
make
sudo make install
sudo make install-mod_tile

また、地図をレンダリングするツールキットMapnikを次のコマンドでインストールします。

sudo apt install curl unzip gdal-bin mapnik-utils node-carto

2.4 OpenStreetMap用のデータベースの作成[コマンドプロンプト]

先ほどのスーパーユーザーでPostgreSQLサーバーにログインし、OpenStreetMap用のデータベースのオーナーを以下のコマンドで作成します。

# サーバーにログイン
sudo -u postgres -i
# オーナーの作成
createuser osmuser

文字コードがUTF8、オーナーがosmuserのgisdbという名前のデータサーバーを以下のコマンドで作成します。

#データベースの作成
createdb -E UTF8 -O osmuser gisdb 
#データベースが作成できたか確認
psql -l

データベースが作成できたか確認するコマンドを打つと、以下のように確認することができます。

拡張機能をデータベースにつけていきます。
今回利用する拡張機能は先ほど紹介したPostGISとhstoreです。
hstoreとはPostgreSQLの型の1種で、キーとバリューの集合を1つの列に管理できます[3]。
この2つの拡張機能をSQL文を用いて追加していきます。

psql -c "CREATE EXTENSION hstore;" -d gisdb

psql -c "CREATE EXTENSION postgis;" -d gisdb

上のコマンドで用いたように、コマンドプロンプトからPostgreSQLにSQL文を実行したい場合は以下のような構文を用います。

psql -c "SQL文" -d 対象データベース

一度PostgreSQLサーバーから出て、OpenStreetMap用のユーザーをVM側に作成し、ユーザーを切り替えます。

exit
# 以下のコマンドを実行した後、new UNIX passwordだけ入力する必要がある
sudo adduser osmuser
# 先ほど入力したパスワードを用いてログイン
su - osmuser

2.5 OpenStreetMapの標準的なCSSとOpenStreetMapデータをデータベースに格納[コマンドプロンプト]

まず、OpenStreetMapの地図の描画のときに必要なCSSをダウンロードして解凍しておきます。

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

次にGeofabrik社が配布しているOpenStreetMapの地域別ダンプファイルをここから取得していきます。 今回は試しに佐賀県のマップを表示したいため、以下のコマンドでOpenStreetMapデータをダウンロードします。

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

gisdbにOpenStreetMapのデータをCSSとともに格納していきます。

osm2pgsql --slim -d gisdb --hstore -S openstreetmap-carto-2.41.0/openstreetmap-carto.style kyushu-latest.osm.pb

大体九州だと、30分くらいで終了し、以下のように表示されます。

2.6 Mapnikスタイルシートの生成[コマンドプロンプト]

シェイプファイルを以下のコマンドで入手します。

cd openstreetmap-carto-2.41.0/
./get-shapefiles.sh

これを実行した結果、以下のようなエラーになりました。

zipファイルが破損しているというエラーみたいですね・・・。
参考にしたサイトの下の方を見たらUbuntu16.04だとうまくいきませんでしたというコメントが1年前にされていました・・・(最終更新が2019/03でタイトルにUbuntu16.04と書いてあるのでもしかしたら修正されたのかもしれませんが、うまくいっていないことを鑑みると、ここの修正ではなかったのかもしれません)。

まとめ

今回はいよいよOpenStreetMapのセットアップに取り組みましたが、うまくいきませんでした。
引き続き、また再挑戦します。

参考サイト

[1]PostgreSQL 超入門、2019/06/13参照
[2]PostGIS(地理情報システムを実現するための拡張モジュール)、2019/06/13参照
[3]PostgreSQLのhstore型を操作するSQL構文まとめ、2019/06/13参照