一覧に戻る

ラスタータイルの作り方(2024年版)

#GDAL#foss4g#PMtiles

はじめに

MapLibreとは

MapLibre Official WebSite https://maplibre.org

  • Web地図に関するプロダクトをOSSとして開発・メンテナンスしているOrganizationです
  • ブラウザ・モバイル向けの地図ライブラリおよび地図配信に関するツール群があります

MapLibre User Group Japan (MUG-JP) とは

MUG-JP Official Web Site https://mug-jp.org/

  • MapLibreプロダクトの開発者によるユーザーコミュニティです
  • ナレッジの共有やイベントの開催による普及活動を行なっています

はじめに

筆者は過去に以下の記事を投稿しています

https://qiita.com/Kanahiro/items/4b5f8db5743c69741220

この数年で地図タイルの静的配信の世界観は大きく変わりました。主にPMTilesの台頭によって、ディレクトリ形式で配信するメリットがなくなっています。上記記事ではディレクトリ形式でのタイル生成を念頭に置いており内容が古くなってしまっています。なので本記事では、令和最新版のラスタータイル生成フローを紹介します。

ラスタータイルの生成フロー

入力はGeoTIFF、出力をPMTilesとします。

graph LR

GeoTIFF --gdal_translate--> MBTiles1[(MBTiles<br />最大ズームのみ)] -- gdaladdo --> MBTiles2[(MBTiles<br />全ズームレベル)] -- go-pmtiles --> PMTiles[(PMTiles)]

:::note info 最もポピュラーは形式としてGeoTIFFで説明していますが、GDALがサポートする形式ならほかの形式でも問題ないでしょう。なお、GeoTIFFがRGB値を持っていることを前提としています。 :::

1. GeoTIFF -> MBTiles

gdal_translateによるフォーマット変換でGeoTIFFをMBTilesへ変換出来ます。

gdal_translate -of MBTILES input.tif output.mbtiles-r bilinear -co BLOCKSIZE=512 -co TILE_FORMAT=WEBP

昨今、ラスタータイルは512^2の解像度がポピュラーですから、-co BLOCKSIZE=512でそう設定しています。またナウいフォーマットとしてWebPを利用する設定も可能です(-co TILE_FORMAT)。

このほかにも多様なオプションが利用可能です、以下のドキュメントを参照しましょう。

https://gdal.org/en/latest/drivers/raster/mbtiles.html#raster-mbtiles

2. MBTiles内に各ズームレベルのタイルを生成する

gdal_translateの変換だけでは、最大のズームレベルのタイルしか生成されません。最大のズームレベルのタイルを用いて、低いズームレベルの画像を生成する必要があります。ここではgdaladdoを利用します。gdaladdoはいわゆるピラミッド画像を生成するためのプログラムです。「最大ズームのタイルを用いて低いズームのタイルを生成する」というのはまさにピラミッド画像でやっていることと同じですから、なんとなく腑に落ちそうです。

gdaladdo -r bilinear output.mbtiles

ここで重要なこととして、gdaladdoは既存ファイルに対する破壊的変更を行うという点に留意してください。頑張ってGeoTIFFからMBTilesにしたのちに、たとえば誤ったパラメータでgdaladdoを実行してしまうと、またGeoTIFFからやり直し…ということがありえます。実行前にMBTilesを複製しておくことをお勧めします。

3. MBTiles -> PMtiles

https://github.com/protomaps/go-pmtiles

go-pmtilesを利用すれば容易にPMTilesへ変換できます。releaseから最新バージョン・適切なアーキテクチャの実行ファイルをダウンロードしておきます。

:::note info Apple SiliconのmacならDarwin_arm64 Intel macならDarwin_x86_64 WindowsならWindows_x86_64 このあたりを選べばおそらく問題ありません。arm版WindowsやLinuxユーザーはご自身でわかると思うので割愛します。 :::

./pmtiles convert output.mbtiles output.pmtiles

これでラスタータイルのPMTilesが得られるので、思い思いのラスタータイルサーバーを構築・配信しましょう。

宣伝

https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%AE%E3%83%97%E3%83%AD%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E6%95%99%E3%81%88%E3%82%8B%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1%E3%83%87%E3%83%99%E3%83%AD%E3%83%83%E3%83%91%E3%83%BC%E9%A4%8A%E6%88%90%E8%AC%9B%E5%BA%A7-%E4%BA%95%E5%8F%A3%E5%A5%8F%E5%A4%A7/dp/4798072249

本記事で紹介したような手順で生成したタイルを配信するサーバーを実装する手法など、サーバーサイド技術を学びたい方向けに書いた書籍です。100冊書いましょう!