OpenMapTilesはOpenStreetMapやその他オープンソースデータをベースにして、地図をベクタータイル形式で配信するためのプロジェクトです。OpenMapTileには様々なコンポーネントが含まれていますが、タイルの作成と配信を手っ取り早く体験できる方法が用意されており、ここではそれを試してみます。
GitHubのQUICKSTART.mdに手順があるので、それを参考に実行します。
目次
全体の流れ
実行するコマンドはたったこれだけです。タイルの作成から配信準備まで、quickstart.shがまとめて行なってくれます。あとはpostserveやtileserverで動作確認をするという流れです。
$ git clone https://github.com/openmaptiles/openmaptiles.git $ cd openmaptiles $ ./quickstart.sh $ docker-compose start postgres $ docker-compose up -d postserve $ make start-tileserver
リポジトリを clone
$ git clone https://github.com/openmaptiles/openmaptiles.git
quickstart.sh を実行
$ cd openmaptiles $ ./quickstart.sh
実行中、以下のエラーが出ることがありますが、COMPOSE_HTTP_TIMEOUT
の値を大きくすることで解消できます。デフォルトで60秒となっているため、それより大きな適当な値を設定します。.env
ファイルに追記するのが手っ取り早いです。
ERROR: for openmaptiles_postgres_1 UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60) ERROR: for postgres UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60) An HTTP request took too long to complete. Retry with --verbose to obtain debug information. If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60). make: *** [Makefile:120: start-db-nowait] エラー 1
.env
# This file defines default environment variables for all images # Use 3-part patch version to ignore patch updates, e.g. 5.0.0 TOOLS_VERSION=5.0 # Make sure these values are in sync with the ones in .env-postgres file PGDATABASE=openmaptiles PGUSER=openmaptiles PGPASSWORD=openmaptiles PGHOST=postgres PGPORT=5432 QUICKSTART_MIN_ZOOM=0 QUICKSTART_MAX_ZOOM=7 DIFF_MODE=false BBOX=-180.0,-85.0511,180.0,85.0511 MIN_ZOOM=0 MAX_ZOOM=14 COMPOSE_HTTP_TIMEOUT=600
PostgreSQL を起動
quickstart.shの最後の方でpostgresがstopされてしまっているので、手動で再度startします。
$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------ openmaptiles_postgres_1 docker-entrypoint.sh postgres Exit 0 $ docker-compose start postgres Starting postgres ... done $ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------- openmaptiles_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:32769->5432/tcp
postserve で動作確認
$ docker-compose up -d postserve Starting openmaptiles_postserve_1 ... done $ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------- openmaptiles_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:32769->5432/tcp openmaptiles_postserve_1 postserve openmaptiles.yam ... Up 0.0.0.0:8090->8090/tcp
動作確認のためにウェブブラウザからlocalhost:8090/tiles/0/0/0.pbf
にアクセスします。大抵は以下のようなファイル保存ダイアログが出る形になります。アクセスできれば成功です。

TileServer GL で動作確認
$ make start-tileserver *********************************************************** * * Download/refresh maptiler/tileserver-gl docker image * see documentation: https://github.com/maptiler/tileserver-gl * *********************************************************** docker pull maptiler/tileserver-gl Using default tag: latest latest: Pulling from maptiler/tileserver-gl ~中略~ Digest: sha256:ecc0a61d53408b3330ac00e0160a88e27bbe2cfb4d99508adc02b903bda43c48 Status: Downloaded newer image for maptiler/tileserver-gl:latest docker.io/maptiler/tileserver-gl:latest *********************************************************** * * Start maptiler/tileserver-gl * ----------------------------> check http://localhost:8080 * *********************************************************** docker run --rm -u 1000:1000 -it --name tileserver-gl -v $(pwd)/data:/data -p 8080:8080 maptiler/tileserver-gl --port 8080 Starting Xvfb on display 99 xdpyinfo: unable to open display ":99". Starting tileserver-gl v3.0.0 No MBTiles specified, using tiles.mbtiles [INFO] Automatically creating config file for tiles.mbtiles [INFO] Only a basic preview style will be used. [INFO] See documentation to learn how to create config.json file. Run with --verbose to see the config file here. Starting server Listening at http://[::]:8080/ Startup complete
ウェブブラウザでlocalhost:8080
にアクセスするとTileServer GLのトップページが開き、Viewerボタンから地図を表示できます。地図をズームイン、ズームアウト、移動すると、上記のコマンドラインにログが出力されていきます。

仕組み
OpenMapTiles の Docker イメージ
Docker Hubのopenmaptilesでは、現在14のDockerイメージが配布されています。GitHubの記載によると、いくつかのイメージは既にレガシーで非推奨のようです。
openmaptiles 提供の Docker イメージ | 説明 | 注意 |
---|---|---|
postgis-preloaded | いくつかのOpenMapTilesデータが事前読み込みされたPostgreSQL。 | |
import-data | OpenMapTiles関連データをPostgreSQLにインポートする。 | |
postgis | GEOS 3.5とPostGIS 2.2をサポートしたPostgreSQLのDockerイメージ。 | |
generate-vectortiles | MBTilesを生成する。 | |
openmaptiles-tools | OpenMapTiles生成ツール。 | |
import-osm | OpenStreetMapをPostGISにインポートする(imposm3を利用)。 | |
import-water | 水域をOpenStreetMapからPostGISにインポートする。 | レガシーイメージのため非推奨。 代替:import-data |
import-natural-earth | NaturalEarthデータをPostGISにインポートする(ogr2ogrを利用)。 | レガシーイメージのため非推奨。 代替:import-data |
import-lakelines | OpenStreetMapの湖のラベル付けをするための中央線をPostGISにインポートする。 | レガシーイメージのため非推奨。 代替:import-data |
import-osmborder | OpenStreetMapの境界をPostGISにインポートする。 | レガシーイメージのため非推奨。 代替:openmaptiles-tools の import-osmborder |
generate-osmborder | OpenStreetMapの境界を生成する。 | レガシーイメージのため非推奨。 代替:openmaptiles-tools の import-osmborder |
import-wikidata | wikiデータをインポートする。 | レガシーイメージのため非推奨。 代替:openmaptiles-tools の import-wikidata |
import-sql | 旧式のイメージなので、代わりにopenmaptiles-toolsを使うこと。 | レガシーイメージのため非推奨。 代替:openmaptiles-tools の import-sql |
postserve | ST_AsMVTを使用してOpenGISTilesベクタータイルをPostGISから直接レンダリングする。 | openmaptiles-toolsにマージされたため、アップデートや新バージョンはそちらを参照すること。 |
上記の内いくつかのイメージについては前述のGitHub – openmaptiles / openmaptilesのdocker-compose.ymlでサービス定義がされてquickstart.shから利用されています。
Docker イメージ | docker-compose.yml での service 名 |
---|---|
postgis | postgres |
import-data | import-data |
openmaptiles-tools | openmaptiles-tools postserve |
generate-vectortiles | generate-vectortiles generate-changed-vectortiles |
quickstart.sh がやっていること
quickstart.shは主にmakeコマンドを実行しており、Makefileでは主にdocker-composeコマンドを呼び出すよう定義しています。
quickstart.shが呼び出しているmakeコマンドを上から順に並べ、実際に実行しているdocker-composeコマンドとDockerイメージをまとめると以下のようになります。実際にはもっと様々な処理が行われていますが、docker-composeに焦点を当てると概ねこのような感じです。openmaptiles-toolsイメージが機能の多くを占めており、run時の引数から伺えるように種々の動作を行っているようです。Docker Hubのページには使い方等詳細が掲載されています。
make | docker-compose コマンド(オプション等詳細は割愛) | Docker イメージ | 引数の特徴的な部分 |
---|---|---|---|
refresh-docker-images | pull | openmaptiles-tools generate-vectortiles postgres | – |
destroy-db | down rm | – | – |
init-dirs | – | – | – |
download-geofabrik “area=${osm_area}” | run | openmaptiles-tools | download-osm |
clean | – | – | – |
all | run | openmaptiles-tools | generate-tm2source generate-imposm3 generate-sql |
start-db-preloaded または start-db import-data | up run run | postgres openmaptiles-tools import-data | – |
import-osm “PBF_FILE=${pbf_file}” | run | openmaptiles-tools | import-osm |
import-borders | run | openmaptiles-tools | import-borders |
import-wikidata | run | openmaptiles-tools | import-wikidata |
import-sql | run | openmaptiles-tools | import-sql |
analyze-db | run | openmaptiles-tools | psql.sh |
test-perf-null | run | openmaptiles-tools | test-perf |
generate-tiles | run | generate-vectortiles openmaptiles-tools | – generate-metadata |
stop-db | stop | postgres | – |
help | – | – | – |
また、quickstart.shとmakeについてはmake help
で使い方を見ることができます。
$ make help ============================================================================== OpenMapTiles https://github.com/openmaptiles/openmaptiles Hints for testing areas make list-geofabrik # list actual geofabrik OSM extracts for download -> <<your-area>> ./quickstart.sh <<your-area>> # example: ./quickstart.sh madagascar Hints for designers: make start-maputnik # start Maputnik Editor + dynamic tile server [ see http://localhost:8088 ] make start-postserve # start dynamic tile server [ see http://localhost:8090 ] make start-tileserver # start maptiler/tileserver-gl [ see http://localhost:8080 ] Hints for developers: make # build source code make list-geofabrik # list actual geofabrik OSM extracts for download make download-geofabrik area=albania # download OSM data from geofabrik, and create config file make download-osmfr area=asia/qatar # download OSM data from openstreetmap.fr, and create config file make download-bbike area=Amsterdam # download OSM data from bbike.org, and create config file make psql # start PostgreSQL console make psql-list-tables # list all PostgreSQL tables make vacuum-db # PostgreSQL: VACUUM ANALYZE make analyze-db # PostgreSQL: ANALYZE make generate-qareports # generate reports [./build/qareports] make generate-devdoc # generate devdoc including graphs for all layers [./layers/...] make bash # start openmaptiles-tools /bin/bash terminal make destroy-db # remove docker containers and PostgreSQL data volume make start-db # start PostgreSQL, creating it if it doesn't exist make start-db-preloaded # start PostgreSQL, creating data-prepopulated one if it doesn't exist make stop-db # stop PostgreSQL database without destroying the data make clean-unnecessary-docker # clean unnecessary docker image(s) and container(s) make refresh-docker-images # refresh openmaptiles docker images from Docker HUB make remove-docker-images # remove openmaptiles docker images make pgclimb-list-views # list PostgreSQL public schema views make pgclimb-list-tables # list PostgreSQL public schema tables cat .env # list PG database and MIN_ZOOM and MAX_ZOOM information cat quickstart.log # transcript of the last ./quickstart.sh run make help # help about available commands ==============================================================================