3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ベクタータイルとMapLibre Styleからラスタータイルをつくる

Last updated at Posted at 2025-10-14

はじめに

MapLibre Styleとベクタータイルを用いた地図配信はずいぶんとコモディティ化してきたと思います。拙著『位置情報エンジニア養成講座』でも、この分野は重点的に扱っています。

また、ラスタータイルの作成は、GeoTIFFなどのラスターデータを元にした手順は十分に知れ渡っています。

一方で、ベクタータイルとMapLibre Styleはあるけど、これをラスタータイル化したい、という時にそれっぽい手順が示されていないように思います。なので本記事でこの手順について述べます。

使う道具

  • MapLibre Style
    • 有効なstyle.jsonがあるとします(リモートでもローカルでもOK)
  • Docker Desktop
    • chiitilerサーバーを動かします
    • chiitilerは、MapLibre Styleをラスタータイルとして配信するためのサーバーです
  • Python
    • tilegetを動かします
    • tilegetは、地図タイルのダウンロードユーティリティです

chiitilerもtilegetも筆者が趣味で開発・公開しているライブラリです。
なお以降の手順はmacOS/bashで実行しています。適宜読み替えてください。

概観

手順

style.jsonを用意

こちらのBrightスタイルを利用させてもらいます。tilesというディレクトリにstyle.jsonとして保存しておきます(これはローカルのstyle.jsonを利用できること示すためであり必須の手順ではありません)。

chiitilerサーバーを起動

cd tiles # tiles/styles/style.json があるとします
docker run -p 3000:3000 -d \
    -e CHIITILER_DEBUG=true \
    -e CHIITILER_CACHE_METHOD=file \
    -e CHIITILER_FILECACHE_DIR=/workdir/cache \
    -v $PWD:/workdir \
    ghcr.io/kanahiro/chiitiler

cacheフォルダにMapLibre Styleで利用されるデータがキャッシュとして保存されることに留意してください。この挙動は環境変数により変更可能です: https://github.com/Kanahiro/chiitiler?tab=readme-ov-file#usage
ただし、リモートのデータを利用する場合はファイルキャッシュを利用することをお勧めします(さもなくば、毎回style.jsonなどを読み直すことになり遅く、サーバーに余計な負荷がかかる)。

http://localhost:3000/debug を開いて地図画面が表示されれれば起動出来ています。

chiitilerは以下のようなURLでタイルを配信してくれます

# ローカルにあるstyle.jsonを用いる場合はfile://プロトコル
http://localhost:3000/tiles/{z}/{x}/{y}.webp?url=file:///workdir/styles/style.json&quality=100&margin=0&tileSize=512

# https://プロトコルで、リモートデータも利用できる
http://localhost:3000/tiles/{z}/{x}/{y}.webp?url=https://tile.openstreetmap.jp/styles/osm-bright/style.json&quality=100&margin=0&tileSize=512

クエリパラメータで画像フォーマットや品質などを制御できます。詳しくはドキュメントを参照してください。 https://github.com/Kanahiro/chiitiler?tab=readme-ov-file#tiles

tilegetでタイルリクエスト

pip install tileget
which tileget # インストールできればパスが通る
tileget "http://localhost:3000/tiles/{z}/{x}/{y}.webp?url=file:///workdir/styles/style.json&quality=100&margin=0&tileSize=512" -o tiles.mbtiles --extent 141.23 40.56 142.45 43.78 --maxzoom 12

# downloading: http://localhost:3000/tiles/0/0/0.webp?url=file:///workdir/styles/style.json&quality=100&margin=0&tileSize=512
# downloading: http://localhost:3000/tiles/1/1/0.webp?url=file:///workdir/styles/style.json&quality=100&margin=0&tileSize=512
# downloading: http://localhost:3000/tiles/2/3/1.webp?url=file:///workdir/styles/style.json&quality=100&margin=0&tileSize=512
# ...

読むとなんとなくわかると思いますが、URL・保存先・領域などを指定して実行します。デフォルト値はインターバルを長めに取っていたりするので、適宜ドキュメントを参照してください https://github.com/Kanahiro/tileget?tab=readme-ov-file#usage
リモートサーバーにリクエストする場合は、過負荷とならないよう、インターバルの取り方に気をつけましょう。

この手順でtiles.mbtilesが出来上がります。QGISで確認してみます。

Screenshot 2025-10-14 at 22.42.54.png© OpenMapTiles © OpenStreetMap contributors タイルが保存されていることがわかる

後片付け

Dockerコンテナが走りっぱなしになってしまうので、止めておきましょう。

docker ps
# CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS                 PORTS                           NAMES
# 488f75ef1c85   ghcr.io/kanahiro/chiitiler   "./docker-entrypoint…"   8 minutes ago   Up 8 minutes ...

docker stop 488
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?