目次
- はじめに
- 実行環境
- 2. OpenStreetMapのセットアップ~再チャレンジ~
- 2.0 目次
- 2.1 VMの作り直し
- 2.2 PostgreSQLとPostGISのインストール[コマンドプロンプト]
- 2.3 必要なパッケージのインストール[コマンドプロンプト]
- 2.4 OpenStreetMap用のデータベースの作成[コマンドプロンプト]
- 2.5 OpenStreetMapの標準的なCSSとOpenStreetMapデータをデータベースに格納[コマンドプロンプト]
- 2.6 Mapnikスタイルシートの生成[コマンドプロンプト]
- 2.7 レンダリングの設定[コマンドプロンプト]
- 2.8 Apacheの設定[コマンドプロンプト]
- まとめ
はじめに
Azureを用いてMaaSに関するアプリの作成をしているときに作ったもの・触ったものを「MaaStep」としてタグをつけて紹介していく企画第3弾です。
前回はOpenStreetMapのセットアップを試みましたが、Mapnikで詰みました。
今回は一度作成したVMを作り直してから、OpenStreetMapのセットアップの再チャレンジをします。
実行環境
リンクはインストール方法へのリンクです。
- Windows10
- Azure CLI
- VMのOS:Ubuntu 16.04
2. OpenStreetMapのセットアップ~再チャレンジ~
2.0 目次
前回と差分のある節に★を付けています。
2.1 VMの作り直し
2.2 PostgreSQLとPostGISのインストール[コマンドプロンプト]
★2.3 必要なパッケージのインストール[コマンドプロンプト]
2.4 OpenStreetMap用のデータベースの作成[コマンドプロンプト]
★2.5 OpenStreetMapの標準的なCSSとOpenStreetMapデータをデータベースに格納[コマンドプロンプト]
★2.6 Mapnikスタイルシートの生成[コマンドプロンプト]
★2.7 レンダリングの設定[コマンドプロンプト]
★2.8 Apacheの設定[コマンドプロンプト] ←ここで設定ミス?によりNotFound
2.1 VMの作り直し
この記事を参考にVMを作り直します。
2.2 PostgreSQLとPostGISのインストール[コマンドプロンプト]
前回と同様にインストールしていきます。
今回は説明をスキップして、実行したコマンドの一覧を載せます。
# VMのアップデート
sudo apt update
sudo apt upgrade
# PostgreSQLとPostGISのインストール
sudo apt install postgresql postgresql-contrib postgis postgresql-9.5-postgis-2.2
2.3 必要なパッケージのインストール[コマンドプロンプト]
前回と同様な部分はコマンドのみ載せます。
# OpenStreetMapデータをPostgreSQLデータベースで使えるように変換するosm2pgsqlパッケージのインストール
sudo apt install osm2pgsql
#地図タイルを提供するために必要なApacheモジュールmod_tileのインストール
sudo apt install git autoconf libtool libmapnik-dev apache2-dev
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のインストールですが、こちらを参考にインストールしていきます。
大体1時間くらいかかりました。
# コンパイラなどの更新
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y gcc-6 g++-6 clang-3.8
export CXX="clang++-3.8" && export CC="clang-3.8"
# Mapnikのインストール
git clone https://github.com/mapnik/mapnik mapnik --depth 10
cd mapnik
git submodule update --init
sudo apt-get install python zlib1g-dev clang make pkg-config curl
source bootstrap.sh
./configure CUSTOM_CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" CXX=${CXX} CC=${CC}
make
make test
sudo make install
# Mapnikを使うときに必要なパッケージのインストール
sudo apt install node-carto
2.4 OpenStreetMap用のデータベースの作成[コマンドプロンプト]
前回と同様にデータベースを作成していきます。
今回は説明をスキップして、実行したコマンドの一覧を載せます。
# サーバーにログイン
sudo -u postgres -i
# オーナーの作成
createuser osmuser
# データベースの作成
createdb -E UTF8 -O osmuser gisdb
# 拡張機能をSQL文を用いて追加
psql -c "CREATE EXTENSION hstore;" -d gisdb
psql -c "CREATE EXTENSION postgis;" -d gisdb
exit
# 以下のコマンドを実行した後、new UNIX passwordだけ入力する必要がある
sudo adduser osmuser
# 先ほど入力したパスワードを用いてログイン
su - osmuser
2.5 OpenStreetMapの標準的なCSSとOpenStreetMapデータをデータベースに格納[コマンドプロンプト]
前回と同様に佐賀県を表示したいため、九州のOpenStreepMapデータをダウンロードします。
wget -c http://download.geofabrik.de/asia/japan/kyushu-latest.osm.pbf
OpenStreetMapの地図の描画のときに必要なスタイルシートをダウンロードします。
git clone https://github.com/gravitystorm/openstreetmap-carto.git
gisdbにOpenStreetMapのデータをスタイルシートとともに格納していきます。
osm2pgsql --slim -d gisdb --hstore -S openstreetmap-carto/openstreetmap-carto.style kyushu-latest.osm.pbf
九州だと、33分くらいで以下の画面が表示されました。
2.6 Mapnikスタイルシートの生成[コマンドプロンプト]
前回詰まってしまったスタイルシートの作成です。 openstreetmap-cartoディレクトリを見たら、get-shapefiles.shがなく、すでにproject.mmlがあったので、以下のコマンドを実行しました。
cd openstreetmap-carto
carto project.mml > style.xml
実行した結果はcarto: Unexpected token s
・・・。
調べたところ、carto
のバージョンが古い説が浮上しました。
そのため、一度azureuserになってこの記事を参考に以下の困んでcarto
を更新します。
sudo apt-get install -y npm
sudo ln -s /usr/bin/nodejs /usr/bin/node
npm install -g @mapbox/carto
再度同じコマンドを実行してみると、何もエラーは表示されなくなりました。
su - osmuser
cd openstreetmap-carto
carto project.mml > style.xml
生成されたstyle.xml
の中身を確認してみると、コードが生成されていました。
前回の原因はOpenStreetMap Cartoのアーカイブファイルで実行しようとしていたためっぽいですね。
今回はOpenStreetMap CartoのGithubからgit clone
してきたので、最新バージョンで実行できたっぽいです。
さて、昨日の山を無事越えたところで、osmuserからexit
します。
2.7 レンダリングの設定[コマンドプロンプト]
レンダリングの設定ファイルを書き換えていきます。
sudo vim /usr/local/etc/renderd.conf
書き換える内容は [default] の以下の部分です。osmuser
の部分は適宜書き換えてください。
XML=/home/osmuser/openstreetmap-carto/style.xml
HOST=localhost
レンダリングの初期化ファイルを作成していきます。
# レンダリングの初期化ファイルのコピー
sudo cp mod_tile/debian/renderd.init /etc/init.d/renderd
# 権限の変更
sudo chmod a+x /etc/init.d/renderd
# 初期化ファイルの書き換え
sudo vim /etc/init.d/renderd
/etc/init.d/renderd
ファイルの以下の部分を書き換えます。
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-c /usr/local/etc/renderd.conf"
RUNASUSER=osmuser
以下のファイルを作成し、オーナーをosmuserに書き換えます。
sudo mkdir -p /var/lib/mod_tile
sudo chown osmuser /var/lib/mod_tile
以下のコマンドでレンダリングサービスを開始します。
sudo systemctl daemon-reload
sudo systemctl start renderd
sudo systemctl enable renderd
2.8 Apacheの設定[コマンドプロンプト]
Apacheをインストールして設定していきます。
# Apacheのインストール
sudo apt install apache2
# モジュールロードファイルの作成
sudo vim /etc/apache2/mods-available/mod_tile.load
モジュールロードファイルには以下を記述します。
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
以下のコマンドでリンクを張ります。
sudo ln -s /etc/apache2/mods-available/mod_tile.load /etc/apache2/mods-enabled/
バーチャルホストファイルを書き換えていきます。
sudo vim /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>に以下を貼り付けます。
LoadTileConfigFile /usr/local/etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 0
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30
Apacheをリスタートします。
sudo systemctl restart apache2
やっとブラウザでVMのipアドレス/osm_tiles/0/0/0.png
で地図が表示されるはずですが、結果はNot Foundでした・・・。
Apacheがらみのエラーっぽいので以下のコマンドでログを確認してみます。
vim /var/log/apache2/error.log
debug: init_storage_backend: initialising file storage backend at: /var/lib/mod_tile
が原因だと思うので、明日はこのエラーを解決していきます。
まとめ
今回は一度作成したVMを作り直してから、OpenStreetMapのセットアップの再チャレンジをしました。
その結果、スタイルシートの作成はできましたが、Apacheの設定をミスったらしく、Apacheサーバー自体は立ったものの、マップの表示はできませんでした。
明日はこのエラーを解決していきます。