QGISとMapTiler Terrain RGBでかんたんDEM活用

## TL;DR

- QGIS 3.24から、MapTiler Terrain RGBなどの標高タイルをサポート
- 標高タイルをシームレスにDEMとして扱える
- 3DビューやDEMの入手が簡単に

## QGIS 3.24の目玉機能「MapTiler Terrain RGB」のサポート

`Terrain RGB`とは、標高値を所定のルールでRGB値にエンコードした画像からなるラスタータイルです。QGISは3.24から`MapTiler Terrain RGB`をサポートします。これはつまり、ラスタータイル画像のRGB値から標高値を復元してDEMとして扱えるようになるということです。

> `Terrain RGB`は、配信する会社によって、MapTiler Terrain RGBと呼ばれたりMapbox Terrain RGBと呼ばれたりしますが、Terrain RGBとしての規格はどちらも同じです。QGISはTerrain RGBだけでなく`Terrarium RGB`もサポートしており、こちらも理屈は同じですが、エンコードのルールが異なります。

> 標高値とRGB値の変換ルールについては下記の記事を参照
https://qiita.com/Kanahiro/items/e22594b738655a189c1d#rgb%E5%80%A4%E3%81%AE%E6%A8%99%E9%AB%98%E6%8F%9B%E7%AE%97

## MapTiler Terrain RGBを見てみる

https://www.maptiler.com/

MapTilerのタイル画像を使うにはアカウント登録が必要です。

さて、MapTiler Terrain RGBのタイルURLは下記になります、`YOUR_ACCESS_TOKEN`は利用者ごとに付与されるキーです。アカウント登録後に[ここ](https://cloud.maptiler.com/tiles/terrain-rgb/)で確認できます。

```
https://api.maptiler.com/tiles/terrain-rgb/{z}/{x}/{y}.png?key=<YOUR_ACCESS_KEY>
```

URLがわかったら、下記の手順でXYZ Tilesに新規接続を作成します。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/b9516929-d423-0934-95af-e2eb4f01b325.png)

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/6fd627b0-9517-a712-63db-56803275f730.png)

> MapTiler Terrain RGBはズームレベル0-12で提供されています

タイル画像を見てみます。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/0a13e4f9-6c52-bcb1-471c-be79ab959a9a.png)

なんとなく地形っぽくは見えますが、見慣れない色合いです。

## TerrainRGBをDEMとして表示する

では`MapTiler Terrain RGB`をDEMとして表示してみます。
XYZ接続の`Interpretation`で`MapTiler Terrain RGB`を選択します。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/52a052e1-10f1-facc-f249-dba1a3f8a312.png)

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/087f5ccc-8a0d-13a9-4300-64d9a47a24c3.png)

この状態で再度タイルを見てみます。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/a747136b-22da-ab67-90da-2abf9140ec31.png)

グレースケールの、割と見慣れた色合いの標高データとなりました。

ただちょっと見た目が淡すぎます。というのも、Terrain RGBの標高の定義域の下限-10000mから、地球の最大標高をカバーする9000mまでの値で白黒のグラデーションをしているためですね（要は分解能が大きすぎる）。見た目だけの話なので、解析だとかには影響ないのですが、とりあえず0-4000mで色塗りしてみます。レイヤスタイルパネルで最小・最大値を書き換えます。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/1313ece3-c5dd-040b-519c-7b05f0cb1dfd.png)

富士山周辺です、見慣れた感じになりました。

ただDEMっぽい見た目になるだけでは面白くありません。実際、このタイルDEMは3D表示や解析に利用していくことが可能です。

## タイルDEMで3Dビュー

地理院タイル空中写真を追加しておき、タイルDEMは非表示としておきます。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/a7a7330a-ff49-bca8-4c03-927a6f07e5aa.png)

3Dマップビューを開きます

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/f97f9568-d69c-cfeb-d40f-01dd64ddf650.png)

設定を開きます

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/4121836b-1e76-d400-123c-19457ce10831.png)

「地形」を画像のとおり設定します

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/2715dd05-871f-63b9-e62b-20e49bac435e.png)

すると3Dで地形が表示されます

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/86d71e4e-41bc-7265-dbd8-b400b9c6cab9.png)

> タイルの切れ目がやや気になりますが、これだけ手軽に3D表示が実現出来るのはうれしい

## タイルDEMをGeoTIFFとして切り出す

タイルDEMを切り出してGeoTIFF形式のDEMとすることができます。
ここで、MapTiler Terrain RGBの最大ズームレベルは12で、タイル解像度が512pxなので、おおむね20m弱程度の地理解像度であること、および、標高値の分解能が0.1mであることに留意する必要があります。

下記の手順でレイヤーをエクスポートすれば、GeoTIFF形式のDEMが得られます。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/79c75361-b886-4869-7a25-d6c28294b428.png)

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/81b52839-3e27-be7b-7397-840d190ac671.png)

> 領域はキャンバスの領域とするのが簡単です。解像度はネイティブに近い縦横20mとしました。

するとこのようなGeoTIFFが得られました。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/89a270e3-2afb-7951-2b3f-4d37af3fc3a0.png)

これで煮るなり焼くなり出来ます…が注意点として、得られるDEMにやや縞があります、傾斜を計算してみます。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/a064bd6d-af55-e079-ed9f-969875a7b2bd.png)

富士山山頂付近ですが、一定間隔で傾斜が大きくなる縞が見えます。なので、精密な解析には使わない、とか、リサンプリングしてならす、といったアプローチが必要でしょう。

> データソースの問題かQGISの問題かまでは調べていません、改善に期待

## 終わりに

Terrain RGBは、結構前からある規格な割に、今回紹介したQGISやMapbox GL JSでの3D表示など最近いろいろと活用の幅が広がってきています（ぜひ地理院標高タイルもTerrain RGBで配信されるようになってほしいですね）。