自作地図のためのPostGISサーバ構築の手順についてです。OSMとオープンデータを取り込んでオリジナル地図を作成するための環境を構築します。
はじめに
最近、GarminGPSやスマホアプリのMapsme向けカスタム地図を作っています。思ったよりも注目頂けたようで、このブログ始まって以来のコメントにご指摘や感想をもらいながら少しづつカスタムを進めてきました。
その中で段々と凝った地図が作りたくなってきて、OSMデータだけでは実現出来ないことが出てきました。OSMの各要素には様々な情報が付与されていますが、その情報だけでは足りないことがあったのです。そこで、以前から気になっていたGIS環境というのを構築してみることにしました。
なお、GISについて詳細は以下のサイトが参考になるかと思います。
- 地理情報システム - Wikipedia
https://ja.wikipedia.org/wiki/%E5%9C%B0%E7%90%86%E6%83%85%E5%A0%B1%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0 - GISでできること - JACIC
http://www.gis.jacic.or.jp/gis/gakushu/whatisgis/whatisgis6.html
環境
以前Linuxファイルシステムのベンチマークに使ったサブPCにPostGISをインストールして、PostGIS兼地図ビルド用サーバPCとして運用することにしました。
- ハードウェア構成
- CPU:core2duo
- Memory:8GByte
- ストレージ
- システムHDD(500GByte)
- HDD(1TByte)
- HDD(2TByte)
- OS/ソフトウェア構成
- OS:ubuntu18.04(64bit)
- PostgreSQL 10.5
- PostGIS
データベースサーバの構築
Ubuntu 18.04.1 Serverのインストール
まず、サブPCにubuntu serverをインストールしました。このPCは古いマザーボード(Asus P5K-E)なのでUSBブートにかなり癖があります。昔に使っていた1GByteのUSBメモリでインストールイメージをbootして行いました。
$ sudo lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.1 LTS Release: 18.04 Codename: bionic
ubuntu serverだとdesktopと違ってaptリポジトリがかなり貧相なことになっています。このままではインストール出来ないパッケージがあるので公式リポジトリを追加しました。
/etc/apt/sources.listに公式リポジトリを追加
- deb http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse
- deb http://archive.ubuntu.com/ubuntu bionic-security main restricted universe multiverse
- deb http://archive.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse
次いでpostgresqlのリポジトリを追加
- deb http://apt.postgresql.org/pub/repos/apt bionic-pgdg main
postgresqlリポジトリの鍵を登録して、リポジトリ一覧してパッケージを更新しておきます。
$ wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - $ sudo apt update $ sudo apt upgrade
sambaのインストール
作業するにあたってファイル共有を使うのでsambaをインストールしておきます。
$ sudo apt install samba $ sudo pdbedit -a YourUserName
smb.confを編集して再起動します(このPCでは/dataにデータ用HDDをマウントしてあります)。
[homes]
comment = Home Directories
browseable = no
read only = no
[data]
comment = DATA Directory
path = /data
browseable = yes
read only = no
guest ok = no
create mask = 644
directory mask = 755
PostGISのインストール
aptで必要なパッケージをインストールします。
$ sudo apt install postgresql-10 postgresql-10-postgis-2.4 postgresql-10-postgis-scripts Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: postgresql-10-postgis-2.4 : Depends: libgdal20 (>= 2.0.1) but it is not installable Depends: libgeos-c1v5 (>= 3.6.0) but it is not installable Depends: liblwgeom-2.4-0 (>= 2.4.0~rc1) but it is not going to be installed Depends: libproj12 (>= 4.9.0) but it is not installable Depends: libprotobuf-c1 (>= 1.0.1) but it is not installable E: Unable to correct problems, you have held broken packages.
PostgreSQLが立ち上がっていることを確認します。ついでに現在のデータベースの格納先を確認しました。私はデータベースは別のディスクに保存したいと考えているので後で変更します。
$ sudo -u postgres psql psql (10.5 (Ubuntu 10.5-1.pgdg18.04+1)) Type "help" for help. postgres=# show data_directory ; data_directory ----------------------------- /var/lib/postgresql/10/main (1 row) postgres=# \q
PostgreSQLのデータ格納先ディレクトリを変更する
postgresqlのデータベースファイル格納先を以下のパスに変更します。
- /data/postgresql/10/main
$ sudo systemctl stop postgresql $ sudo systemctl status postgresql ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: inactive (dead) since Tue 2018-09-18 06:12:58 UTC; 27s ago Main PID: 1459 (code=exited, status=0/SUCCESS) Sep 18 05:57:46 p5k-server systemd[1]: Starting PostgreSQL RDBMS... Sep 18 05:57:46 p5k-server systemd[1]: Started PostgreSQL RDBMS. Sep 18 06:12:58 p5k-server systemd[1]: Stopped PostgreSQL RDBMS.
停止してればOKです。rsyncで既存データベースを丸ごとコピーします。
$ sudo rsync -av /var/lib/postgresql /data $ ls /data lost+found postgresql
コピーが終わったら元ファイルをリネームしておきます。
$ sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak
続いて設定ファイルの項目を編集します。
/etc/postgresql/10/main/postgresql.confを編集
- data_directory = '/data/postgresql/10/main' # use data in another directory
その後、PostgreSQLを再起動します。 $ sudo systemctl start postgresql $ sudo systemctl status postgresql ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Tue 2018-09-18 06:24:53 UTC; 9s ago Process: 3378 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 3378 (code=exited, status=0/SUCCESS) Sep 18 06:24:53 p5k-server systemd[1]: Starting PostgreSQL RDBMS... Sep 18 06:24:53 p5k-server systemd[1]: Started PostgreSQL RDBMS.
再起動したら格納先が変更されていることを確認します。
$ sudo -u postgres psql psql (10.5 (Ubuntu 10.5-1.pgdg18.04+1)) Type "help" for help. postgres=# show data_directory ; data_directory -------------------------- /data/postgresql/10/main (1 row) postgres=#
問題なければもとのデータを削除します。
$ sudo rm -Rf /var/lib/postgresql/10/main.bak
PostgreSQLへの外部アクセス設定
次にpostgresqlに外部から接続出来るように設定します。
以下のファイルの該当箇所をそれぞれ編集します。ここではローカル環境で限定して使うということで外部から無条件で接続出来るようにしています。
/etc/postgresql/10/main/postgresql.confを編集
- listen_addresses = '*'
/etc/postgresql/10/main/pb_hba.confを編集
- host all all 0.0.0.0/0 trust
上記の設定を行ったらサービスを再起動します。
データベースの作成
新しくデータベースを作成する
OSMデータを格納するデータベースを作成します。
- DBユーザ:gisuser
- DB名:gis
- エンコード:UTF8
ユーザの作成
$ sudo -u postgres createuser gisuser
データベースの作成
$ sudo -u postgres createdb --encoding=UTF8 --owner=gisuser gis
データベースのPostGISを有効にする
$ sudo -u postgres psql --dbname=gis -c "CREATE EXTENSION postgis;" CREATE EXTENSION $ sudo -u postgres psql --dbname=gis -c "CREATE EXTENSION postgis_topology;" CREATE EXTENSION
OSMデータをインポートする
osm2pgsqlコマンドを使用してOSMデータをインポートします。ubuntu18.04の場合は以下のようにしてインストール出来ます。
$ sudo apt install osm2pgsql
ここではGeofabrikから最新の日本周辺OSMデータを取得して、osm2pgsqlでデータベースにインポートします。なお、メモリの関係で”-s”オプションをつけてslimモードで実行しました。
$ wget https://download.geofabrik.de/asia/japan-latest.osm.pbf $ sudo -u gisuser osm2pgsql -s -c -d gis -U gisuser ./japan-latest.osm.pbf osm2pgsql version 0.94.0 (64 bit id space) Using built-in tag processing pipeline Using projection SRS 3857 (Spherical Mercator) Setting up table: planet_osm_point Setting up table: planet_osm_line Setting up table: planet_osm_polygon ... Stopped table: planet_osm_ways in 5861s node cache: stored: 61745564(39.86%), storage efficiency: 58.89% (dense blocks: 4855, sparse nodes: 32542721), hit rate: 38.16% Osm2pgsql took 14693s overall
日本全体で約4時間かかりました。作業中のCPU使用率を見ているとほとんどがI/O待ちのようです。HDDへのアクセスがボトルネックですね。
インポートしたデータを見てみると、、、
$ sudo -u gisuser psql -d gis psql (10.5 (Ubuntu 10.5-1.pgdg18.04+1)) Type "help" for help. gis=> \d List of relations Schema | Name | Type | Owner --------+--------------------+-------+---------- public | geography_columns | view | postgres public | geometry_columns | view | postgres public | planet_osm_line | table | gisuser public | planet_osm_nodes | table | gisuser public | planet_osm_point | table | gisuser public | planet_osm_polygon | table | gisuser public | planet_osm_rels | table | gisuser public | planet_osm_roads | table | gisuser public | planet_osm_ways | table | gisuser public | raster_columns | view | postgres public | raster_overviews | view | postgres public | spatial_ref_sys | table | postgres (12 rows) gis=> select name from planet_osm_line where bicycle='yes' and name<>'' limit 10; name ------------------------------ ゲート通り(空港通り) ゲート通り(空港通り) 国道329号 国道329号 国道329号 国道329号 国道329号 国道329号 渡海浜入り口(ピース浜入り口) 三太郎トンネル (10 rows)
それっぽいデータが入っているようです。
外部からデータベースに接続する
次に私がいつも使っているメインPCから構築したデータベースに接続してデータを引っ張ってこられるか確認します。ここではQGISを使用しました。
所感
ひとまずデータベースサーバの構築が完了しました。あとは地図に必要な要素をインポートしてどう処理していくか、というところです。そのあたりも後日にまとめたいと思います。
参考
この記事は以下の内容を参考に記載させていただきました。
- DigitalOcean - How To Move a PostgreSQL Data Directory to a New Location on Ubuntu 16.04
https://www.digitalocean.com/community/tutorials/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-16-04 - Github/kitcharoenp - Set up PostgreSQL and PostGIS extension on Ubuntu
https://kitcharoenp.github.io/postgresql/postgis/2018/05/28/set_up_postgreSQL_postgis.html - らんすの本棚 - 他ホストから接続するための設定
http://rina.jpn.ph/~rance/linux/postgresql/connect.html - OSM Wiki - PostGIS
https://wiki.openstreetmap.org/wiki/PostGIS - JURIGIS - OSMのデータをPostGISのDBに入れてみる
http://www.jurigis.me/2015/01/12/osm-download/ - JIRIGIS - QGISでPostGISのデータを確認
http://www.jurigis.me/2015/01/29/display-postgis-data-in-qgis/ - kashiの日記 - ubuntu 18.04 インストール(7) samba
http://verifiedby.me/adiary/0123 - ytooyamaのブログ - Ubuntu 18.04.1を新規インストールするときはapt lineに注意しよう
https://ytooyama.hatenadiary.jp/entry/2018/07/27/223815 - learnOSM - osm2pgsql
https://learnosm.org/ja/osm-data/osm2pgsql/