Windowsでxyzタイルを作るよ（WSL2でgdal2tiles.pyを動かす） 

# はじめに

Windowsでオルソ画像のxyzタイルを作りたい。

@Kanahiro さんの記事が参考になるとの情報を得た。
参考：https://qiita.com/Kanahiro/items/4b5f8db5743c69741220

gdal2tiles.pyをxyzオプション付きで動かせばいいそうだ。
※GDAL3.1以上のバージョンが必要

この記事によるとWindowsの環境構築がややこしそうだけれど、
今ならWSLでいけんじゃね？と思ったのでやってみた。

# 環境構築
## WSLを有効化
既に動かしている人はパス
入ってない人はコマンドプロンプトから以下のコマンドでインストール(Ubuntuが入る)

``` bat
> wsl --install
```

## GDALインストール
以下、WSLのコンソールで作業する。
ワンチャン入っているかもしれないのでバージョン確認

``` console
$ gdalinfo --version

Command 'gdalinfo' not found, but can be installed with:

sudo apt install gdal-bin
```

入ってないからこれで入れろって出てきたのでそのままやる

``` console
$ sudo apt install gdal-bin
[sudo] password for takeyabu:
```

パスワードを入れたらインストールされた。
バージョン確認

``` console
$ gdalinfo --version
GDAL 3.0.4, released 2020/01/28
```

古い。残念。

では以下のサイトを参考にUbuntuGISのリポジトリを追加して
https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable

``` console
$ sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
 Unstable releases of Ubuntu GIS packages. These releases are more bleeding edge and while generally they should work well, they dont receive the same amount of quality assurance as our stable releases do.
 More info: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable
Press [ENTER] to continue or Ctrl-c to cancel adding it.

Get:1 http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu focal InRelease [23.8 kB]
Get:2 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Hit:3 http://archive.ubuntu.com/ubuntu focal InRelease
Get:4 http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu focal/main amd64 Packages [56.8 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:6 http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu focal/main Translation-en [24.7 kB]
Get:7 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Fetched 441 kB in 3s (128 kB/s)
Reading package lists... Done
```

アップデート

``` console
$ sudo apt-get update
Hit:1 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:2 http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu focal InRelease
Hit:3 http://archive.ubuntu.com/ubuntu focal InRelease
Hit:4 http://archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Reading package lists... Done
```

アップグレードできるパッケージを確認

``` console
$ sudo apt list --upgradable
Listing... Done
gdal-bin/focal 3.4.0+dfsg-1~focal0 amd64 [upgradable from: 3.0.4+dfsg-1build3]
gdal-data/focal 3.4.0+dfsg-1~focal0 all [upgradable from: 3.0.4+dfsg-1build3]
libgeos-c1v5/focal 3.10.1-1~focal0 amd64 [upgradable from: 3.8.0-1build1]
libgeotiff5/focal 1.7.0-2~focal1 amd64 [upgradable from: 1.5.1-2]
libspatialite7/focal 5.0.1-2~focal0 amd64 [upgradable from: 4.3.0a-6build1]
proj-bin/focal 8.2.0-1~focal0 amd64 [upgradable from: 6.3.1-1]
proj-data/focal 8.2.0-1~focal0 all [upgradable from: 6.3.1-1]
python3-gdal/focal 3.4.0+dfsg-1~focal0 amd64 [upgradable from: 3.0.4+dfsg-1build3]
```

GDAL3.4にあげられるっぽい
なんか全部上げちゃった方が良さそうなものな気がするのでパッケージ指定せずアップグレード

``` console
$ sudo apt upgrade
```

入った
バージョン確認

``` console
$ gdalinfo --version
GDAL 3.4.0, released 2021/11/04
```

上がった。成功。

## Python確認
Pythonのバージョン確認

``` console
$ python3 -V
Python 3.8.10
```

問題なさそう


# gdal2tiles.pyを実行

とりあえず動かしてみる

``` console
$ gdal2tiles.py
Usage: gdal2tiles.py [options] input_file [output]

gdal2tiles.py: error: You need to specify at least an input file as argument to the script
```

ちゃんとPATHが通ってて使い方が間違ってるよってエラーが出ていますね。

では変換対象のオルソ画像を配置する。

WSLのファイルには`\\wsl$`でアクセスできる。
WindowsのExplorerで`\\wsl$\Ubuntu\home\<アカウント名>`を開いてファイルを貼り付ける。

変換パラメータを付けてgdal2tiles.pyを実行

``` console
$ cd
$ gdal2tiles.py source.tif target_dir -z14-18 --xyz
Generating Base Tiles:
0...10...20...30...40...50...60...70...80...90...100
Generating Overview Tiles:
0...10...20...30...40...50...60...70...80...90...100
```

出来た

バーチャルラスタでもできました。

``` console
$ gdal2tiles.py source.vrt target_dir -z14-18 --xyz
Generating Base Tiles:
0...10...20...30...40...50...60...70...80...90...100
Generating Overview Tiles:
0...10...20...30...40...50...60...70...80...90...100
```

gdal2tilesのリファレンスはこちら
https://gdal.org/programs/gdal2tiles.html

## コマンドプロンプトから実行

wslのコンソールを使って実行するのに抵抗があればコマンドプロンプトから実行しましょう。
変換対象や出力先もWindowsディレクトリが扱えます。

今回は対象ファイルを`C:\tmp\ortho\source.tif`に配置
対象フォルダに移動して実行

``` bat
> cd C:\tmp\ortho\
> wsl gdal2tiles.py source.tif target_dir -z14-18 --xyz
Generating Base Tiles:
0...10...20...30...40...50...60...70...80...90...100
Generating Overview Tiles:
0...10...20...30...40...50...60...70...80...90...100
```

できました。

アクティブディレクトリではなくPATH指定する場合はちょっと書き換える必要があります。
例えば、`D:\tmp\Sample\source.tif`を処理したい場合、
どのように表記すればいいのかは`wslpath`コマンドを使って調べます。

``` bat
> wsl wslpath -u 'D:\tmp\Sample\source.tif'
/mnt/d/tmp/Sample/source.tif
```

`/mnt/d/tmp/Sample/source.tif`で実行してみます

``` bat
> wsl gdal2tiles.py /mnt/d/tmp/Sample/source.tif /mnt/d/tmp/Sample/target_dir -z14-18 --xyz
Generating Base Tiles:
0...10...20...30...40...50...60...70...80...90...100
Generating Overview Tiles:
0...10...20...30...40...50...60...70...80...90...100
```

できました。
繰り返し実行するならバッチファイルにしておくと便利ですね。

#さいごに

今は知らないけど数年前WSLはI/Oが遅いことがよく話題になっていたので、今回のようなファイル読み書きメインの処理はパフォーマンスが期待できないかもしれない。
UbuntuのGDAL、WindowsのDockerでGDAL、Windows版QGISバンドルのGDAL、WSLのGDALとかでベンチマークしてみたいなぁ。


# 本記事のライセンス

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/">![クリエイティブ・コモンズ・ライセンス](https://i.creativecommons.org/l/by/4.0/88x31.png)</a>
この記事は <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">クリエイティブ・コモンズ 表示 4.0 国際 ライセンス</a>の下に提供されています。