postgis-preloadedコンテナ
今回は、OpenMapTilesで使用されているDockerコンテナの一つpostgis-preloadedの内容を確認します。
Dockerイメージとコンテナの確認
OpenMapTilesで、アルバニアのmbtilesを作成すると下記4つのDockerイメージがダウンロードされます。
REPOSITORY TAG IMAGE ID CREATED SIZE
openmaptiles/postgis-preloaded 5.2 79f59e3f8967 4 months ago 2.04GB
openmaptiles/postgis 5.2 985d6417de5e 4 months ago 458MB
openmaptiles/generate-vectortiles 5.2 d9f988ac9ced 4 months ago 824MB
openmaptiles/openmaptiles-tools 5.2 5f66a6682504 4 months ago 752MB
mbtiles作成後は、postgis-preloadedコンテナ(以降、preloadコンテナ)が残っていますので、mbtiles作成中に使用されていたものと思われます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4fa49ef364a openmaptiles/postgis-preloaded:5.2 “docker-entrypoint.s…” 23 hours ago Up 23 hours 0.0.0.0:XXX->5432/tcp openmaptiles_postgres_1
openmaptiles-toolsのGitHubのページを確認すると、以下のように各コンテナの説明があります。
import-dataコンテナにてインポートされるデータ(Natural Earth、water polygons、lake centerlines)を事前にロードしたもので、主にテスト用、ユーザー・パスワードは固定といったことが書いてあります。
今回は、このpreloadコンテナについて確認します。
postgis-preloadedコンテナとは
preloadコンテナは、OpenMapTilesのタイル作成時間を短縮するために、一部のデータを事前にPostGISデータベースに格納したコンテナです。
preloadコンテナの特徴を以下に示します。
- コンテナの内容は、PsotgreSQL(PostGIS)のデータベース
- mbtilesの作成時間を短縮することが目的
- NaturlEarthやアルバニアのOSMデータ、OSM派生データ(水系ポリゴンと湖中心線)を収容
図にすると以下のようになります。
preloadコンテナに収容されるデータは、アルバニアのosm.pbfとNaturalEarthのシェープファイルから構成されます。
NatralEarthは、”The Map Update Committee”により提供される著作権が放棄された世界地図データです。以下に特徴を示します。
- 提供データ形式はシェプファイル
- 3種類の縮尺のデータを提供(1千万分の1(ne_10m)、5千万分の1(ne_50m)、1億1千万分の1(ne_110m))
- EPSG4326(世界測地系緯度経度)で提供
NaturalEarthのダウンロードページを以下に示します。
ダウンロードできるデータは、海岸線などの物理的なデータ(Physical)、国境線や海里線などの物理的でないデータ(Cultual)、画像データ(Raster)の3種類です。各データの種類(レイヤ)は、こちらに記載されています。
preloadコンテナの内容確認
では、preloadコンテナの内容を確認しましょう。
1.preloadコンテナの削除
以下のように作成済みのpreloadコンテナを削除します。
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af396cbf0309 openmaptiles/postgis-preloaded:5.2 “docker-entrypoint.s…” 16 minutes ago Up 16 minutes 0.0.0.0:5432->5432/tcp openmaptiles_postgres_1
$ docker container stop openmaptiles_postgres_1
openmaptiles_postgres_1
$ docker container rm openmaptiles_postgres_1
openmaptiles_postgres_1
2.docker-compose.ymlファイルの編集
preloadコンテナ上のPostGISにデフォルトポート(5432)以外を使ってアクセスしたい場合は、openmaptiles直下にある上記ファイルを編集し、ホスト側のポート番号を指定します。
3.preloadコンテナの起動
makeコマンドを使ってpreloadコンテナを起動します。
$ make start-db-preloaded
Starting postgres docker compose target using openmaptiles/postgis-preloaded image (no recreate if exists)
Creating openmaptiles_postgres_1 … done
Wait for PostgreSQL to start…
docker-compose run –rm –user=1000:1000 openmaptiles-tools pgwait
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
807c01a9566c openmaptiles/postgis-preloaded:5.2 “docker-entrypoint.s…” 12 seconds ago Up 11 seconds 0.0.0.0:XXXX->5432/tcp openmaptiles_postgres_1
4.preloadコンテナへのアクセス
以下のようにpreloadコンテナ上のbashからpsqlを起動してテーブル一覧を表示します。
$ docker exec -it openmaptiles_postgres_1 bash
postgres@807c01a9566c:/$ psql -U openmaptiles
psql (9.6.18)
Type “help” for help.
openmaptiles=# \dt
List of relations
Schema | Name | Type | Owner
ーーーーー+ーーーーーーーーーーーーーーー+ーーーー+ーーーーーーー
public | country_languages | table | openmaptiles
public | country_osm_grid | table | openmaptiles
public | lake_centerline | table | openmaptiles
public | ne_10m_admin_0_bg_buffer | table | openmaptiles
5.psqlによるテーブルごとのデータ件数の確認
以下のSQLを発行し、テーブルごとのレコード件数を確認します。一覧は後述します。
openmaptiles=# select relname, n_live_tup from pg_stat_user_tables where schemanaame=’public’;
relname | n_live_tup
ーーーーーーーーーーーーーーーーーーーー+ーーーーーー
spatial_ref_sys | 8500
country_osm_grid | 23219
country_languages | 249
ne_10m_admin_0_boundary_lines_land | 462
ne_10m_admin_0_countries | 255
ne_10m_admin_1_states_provinces | 4594
6.pgAdminからのアクセス
PostgreSQLのGUIツールpgAdminからもpreloadコンテナ上のPostGISへアクセスできます。
preloadコンテナに収容されるデータ
データ内容を確認したところ、153テーブルが存在し135テーブルにデータが存在しました。(18テーブルはレコード0件)
[table id=22 /]
テーブル名の先頭が、”ne_”のテーブルはNatural Earthのデータ、”osm_”はOpenStreetMap(OSM)のデータです。
OSMデータは、アルバニアのデータだけが収容されていると思われます。
OpenJUMPによる地図表示
最後に、OpenJUMPからSQLを発行して地図表示してみます。
小縮尺地図の海ポリゴン(ne_110m_ocan)を表示してみます。
続いて、OSMの公園ポリゴン(osm_park_polygon)を表示してみます。
アルバニアだけが収容されていることがわかります。
以下は、公園の名称(nameカラム)をラベルとして表示した例です。
まとめ
今回は、OpenMapTilesのpreloadコンテナの内容を確認しました。
アルバニアの地図を作成するために必要なデータを予め収容したデータベースと考えるとよさそうです。
アルバニアのmbtrilesが15分ほどで完成する理由は、このpreloadコンテナにあるようです。
一方で、そのために2GBものイメージをダウンロードするのは少々疑問もあります。
quickstart.shの”–empty”オプションを指定すると、preloadコンテナを使わずにすべてのデータをpostgisにインポートしてmbtilesを作成するようです。
処理時間が長くなると思いますが、次回試してみたいと思います。