TL;DR
- GDAL v3.1で
gdal2tiles.py
に--xyzオプションが追加されたので、これを使えば簡単。以下コマンド例。
# source.tif -> target_dir の変換コマンド
# ズームレベル3-18で、XYZタイル形式で、4スレッドで並行処理するという意味
gdal2tiles.py source.tif target_dir -z3-18 --xyz --processes=4
- 元データは予め投影法をEPSG:3857にしておきましょう
- そうしなくても処理は出来ますが、事前に再投影しておいた方が圧倒的にタイル生成が速いです
- WindowsではQGISを使えば環境構築も簡単です
詳細
冒頭が結論です。以下には色々調べた結果のつらみが色々書いてあります
つらみ①:gdal2tiles.pyは、--xyzオプションを付与しないとTMS形式のタイルが生成される
これが最大の罠で、現状、ネットを色々調べてもなかなかこれがわかりにくかった。TMS形式は、いわゆるXYZタイルとは南北が逆なので、日本国内のタイル作ってるのにオーストラリアにタイルが生成されてたりした。何やっても変な位置にタイルが作られるので半泣きだったが、ちゃんとドキュメントを読めば、デフォルトはTMS
と書いてある。
つらみ②:--xyzオプションはGDAL3.1以降にしか存在しない
GDAL3.1は2020/1リリースです。比較的最近のリリースであり、つまりこれまではXYZタイル形式での変換はGDALでは出来なかったという事…(でもラスタータイル 生成
みたいに調べるとgdal2tiles.pyの情報が多数出てくる罠)。
https://github.com/gsi-cyberjapan/gdal2xyztiles.py
ちなみに過去に国土地理院さんがgdal2tiles.pyを拡張したスクリプトを公開していたよう
つらみ③:QGISのプロセッシングツールのgdal2tilesではXYZタイルをつくれない
2020-03-03: ①macOSのQGIS3.16でバージョン情報みたら3.1.2となっていました②Windows 64bitのQGIS3.18でバージョン情報見たら3.1.4になっていましたので、QGIS内蔵のGDAL自体のバージョンは問題なさそうです
QGISのプロセッシングツール経由のgdal2tilesではXYZタイルを作る事はできません。XYZタイルをつくるXYZタイルの生成
というプロセッシングツールはありますが、こちらはQGISのキャンバスのレンダリング結果を用いるため、処理が非常に遅いです(QGISキャンバスを用いるゆえの便利さもあります)。
つらみ④:GDALの環境構築
Windows
QGISにはGDALが内蔵されているので、それを利用するのが簡単です。QGISのPythonコンソールではGDALへのパスが通っているためsubprocessで動かせます。下記が例(QGIS3.16 LTRで検証)。
import subprocess
subprocess.run("gdal2tiles.bat src.tif output_folder -z0-16 --xyz --processes=4 -w none", shell=True)
Ubuntu
apt-get gdal-bin
で入りますが、これはバージョンが2.4.2
になってNG。
https://qiita.com/ozo360/items/f78c95795827d7732dff にてUbuntuで最新のGDALをインストールする方法が紹介されています。
macOS
# GDALをbrewで最新にしてpython-bindingsも最新にすればよい
brew install gdal
pip install --upgrade gdal
Docker
これが一番簡単でしょう。-vと-wはホストマシンのカレントディレクトリをコンテナのカレントディレクトリとするイディオムです。
docker run -it -v $PWD:/usr/src/app -w /usr/src/app osgeo/gdal gdal2tiles.py src.tif output_folder -z0-16 --xyz --processes=4 -w none