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のページを確認すると、以下のように各コンテナの説明があります。

GitHub上の各イメージの説明

import-dataコンテナにてインポートされるデータ(Natural Earth、water polygons、lake centerlines)を事前にロードしたもので、主にテスト用、ユーザー・パスワードは固定といったことが書いてあります。
今回は、このpreloadコンテナについて確認します。

postgis-preloadedコンテナとは

preloadコンテナは、OpenMapTilesのタイル作成時間を短縮するために、一部のデータを事前にPostGISデータベースに格納したコンテナです。
preloadコンテナの特徴を以下に示します。

  • コンテナの内容は、PsotgreSQL(PostGIS)のデータベース
  • mbtilesの作成時間を短縮することが目的
  • NaturlEarthやアルバニアのOSMデータ、OSM派生データ(水系ポリゴンと湖中心線)を収容

図にすると以下のようになります。

preloadコンテナのイメージ

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のダウンロードページを以下に示します。

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へアクセスできます。

pgAdminからpreloadコンテナ上のPostGISを参照

preloadコンテナに収容されるデータ

データ内容を確認したところ、153テーブルが存在し135テーブルにデータが存在しました。(18テーブルはレコード0件)

[table id=22 /]

テーブル名の先頭が、”ne_”のテーブルはNatural Earthのデータ、”osm_”はOpenStreetMap(OSM)のデータです。
OSMデータは、アルバニアのデータだけが収容されていると思われます。

OpenJUMPによる地図表示

最後に、OpenJUMPからSQLを発行して地図表示してみます。
小縮尺地図の海ポリゴン(ne_110m_ocan)を表示してみます。

OpenJUMPにて表示したne_110m_ocanを表示

続いて、OSMの公園ポリゴン(osm_park_polygon)を表示してみます。

osm_park_polygonを表示

アルバニアだけが収容されていることがわかります。
以下は、公園の名称(nameカラム)をラベルとして表示した例です。

公園名称も表示

まとめ

今回は、OpenMapTilesのpreloadコンテナの内容を確認しました。
アルバニアの地図を作成するために必要なデータを予め収容したデータベースと考えるとよさそうです。
アルバニアのmbtrilesが15分ほどで完成する理由は、このpreloadコンテナにあるようです。

一方で、そのために2GBものイメージをダウンロードするのは少々疑問もあります。
quickstart.shの”–empty”オプションを指定すると、preloadコンテナを使わずにすべてのデータをpostgisにインポートしてmbtilesを作成するようです。
処理時間が長くなると思いますが、次回試してみたいと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次