複数メッシュからなる広範囲の数値標高モデルをざっくりとBlenderで扱う

# 目指すもの

Blenderででっかい佐渡島、眺めたくないっすか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/829f7c87-ac05-661c-20bb-bb799aef82fd.png)

基盤地図情報として公開されている高解像度の数値標高モデルを用いて、広範囲の地形をそれなりの解像度＆1回の作業で Blender へ持っていきます。

## サブ目的

検索するとQGISの「3D地図」からobj形式でエクスポートする方法が解説されていますが、その通りに行うとBlender側で崩れてしまう問題を解決します。

<img width="512" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/5d8b2531-b95d-f9c5-1a8b-520b346e16ac.png">

画像形式で地形を出力する方法もあるのですが、各ドットが東西南北の直角方向に向いているために谷の形状や山容をうまく表現できなかったり、画像の解像度によって地形が粗くなる問題を解決します。

# 事前に必要なもの

- [基盤地図情報ダウンロードサービス](https://fgd.gsi.go.jp/download/menu.php)のアカウント
- [QGIS](https://qgis.org/ja/site/forusers/download.html#)

:::note warn
本記事に基づく成果物は [国土地理院コンテンツ利用規約](https://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html) に従うものとします
:::

# 数値標高モデルのダウンロード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/ff5f24c9-7231-7539-efc4-aa9bcb7f9702.png)

国土地理院の[基盤地図情報ダウンロードサービス](https://fgd.gsi.go.jp/download/menu.php)から数値標高モデルをダウンロードします。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/4ff05bce-65ac-082f-e5de-3af96a0eddd7.png)

画面左上の情報タブはデフォルトで「DEM」タブが選ばれているのでそのままにします。その他の地図データも必要な場合は「基本項目」タグから選ぶこともできますが今回は割愛します。

デフォルトでは解像度の高い5mメッシュが選択されていますが、複数のメッシュを扱う場合は10mメッシュ（10B）を用いることを強く推奨します。

メッシュを選択し終えたら「ダウンロードファイル確認へ」を押して次へ進みます。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/106b3f1a-7af3-3a27-8209-f3fe6f8dd249.png)

「全てチェック」を押して「まとめてダウンロード」しましょう。
10秒ほど待つとダウンロードが始まります。

:::note info
この画面で一度<b>ログイン</b>とアンケートが要求されます。
より良いサービスの実現に貢献するため、アンケートに回答しましょう。
:::

:::note warn
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/5774224d-4cab-bd69-6275-1e2c0e7eb2e6.png)
広範囲のメッシュをダウンロードしようとすると、ダウンロードページが複数生成される場合があります。必ずページ下部をチェックし、すべてのページごとのデータをダウンロードしましょう。
:::

## XMLファイルの展開

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/e7d9f91d-acc2-0d71-670d-dceae59d8f38.png)

ダウンロードした"PackDLMap.zip"を展開すると各メッシュごとのzipファイルが格納されています。必要なのはさらにこの中にあるxmlファイルです。作業フォルダを用意し、7zipで「ここに展開」を選ぶと一度で終わらせることができます。

今回は D:\Sado\XML というフォルダにXMLファイルを格納します。

:::note info
PackDLMap.zip 内に含まれる4つのxmlファイルは不要です。
:::

# QGISでの作業
### プラグインの導入と設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/ffba218f-cdc6-5911-acb3-f410f7891eaf.png)

「プラグイン」→「プラグインの管理とインストール」から必要なプラグインを検索しインストールします。

| プラグイン | 役割 |
|:-:|:-:|
|QuickDEM4JP|数値標高モデルの読み込み（[解説](https://qiita.com/nokonoko_1203/items/b99aa733cb215305f8aa)）|
|Qgis2threejs|3Dでの表示とエクスポート|

----

### 標高データの読み込み（QuickDEM4JP）

「プロジェクト」→「新規」を選んで新規プロジェクトを開始したら、QuickDEM4JP から数値標高モデルのXMLファイルをインポートします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/f03c780f-d2b1-6bc3-e0f7-6e0ac9bb1e86.png)

QuickDEM4JPの設定は以下の通り。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/f1ca6cbd-a9ad-7d3e-c776-59adef19489e.png)

|   |   |
|:-:|:-:|
|形式|'xml'を含むフォルダ|
|DEM|D:\Sado\XML|
|出力先|D:\Sado\Sado.tiff|
|CRS <sup><b>※注</b></sup>|ESPG:6677 - JGD 2011|

「CRS」の項目で空間座標系にデフォルトの「ESPG 4326 - WGS 84」を用いてしまうと、この後の作業で意図しない座標にモデルが出現するため、ESPG:6677 - JGD 2011 などの日本測地系を用いてください。右の小さな地球儀アイコンから追加できます。
空間座標系の一覧 : https://lemulus.me/column/epsg-list-gis

読み込みには時間がかかりますので辛抱強く待ちましょう。

:::note warn
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/e08491c2-bd2a-3109-d368-e088133a0bda.png)
QGISで扱えるメッシュ範囲を超えると「セルサイズが大きすぎます」とのエラーが出ます。
DEMが5mメッシュであれば10mメッシュ（10B）を利用します。10mメッシュでもエラーが出る場合は範囲を小さくします。各都府県より小さい程度が目安です。
:::

成功すれば以下のような画面になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/99f2e920-4967-91d7-9071-e4586da35b70.png)

----

### 3Dモデルの表示（Qgis2threejs）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/ab84e9ab-90a2-82cd-0b7d-3e0a3aceda70.png)

続いて三角アイコンの Qgis2threejs を開き、3次元ビューで標高データが正しく反映できているか確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/d0fd2967-4442-ef86-7899-47f2349223f7.png)

「sado」のレイヤーを右クリックして以下プロパティを編集します。

| | |
|:-:|:-:|
|Resampling level|6|
|Image width|512, 1024, 2048, 4096|

Resampling level は地形の細かさを反映します。最高の6にします。
Image width はこの後で追加する航空写真テクスチャの解像度を反映します。多いほど極端に処理が重くなりますので最初はデフォルトの512でいじらず、適宜様子を見ながら上げていくと良いでしょう。

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/6d0d0650-6314-14a0-0a94-d5a1f8185ccb.png)

標高のスケール（倍率）を変えたい場合は「Scene」→「Scene Settings」から「Z exaggeration」の値を変更します。

----

### glTF形式での出力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/1ce623ef-4014-bce8-139b-b1e70b90a7ba.png)

この Qgis2threejs の画面から glTF で出力すれば Blender でも扱える3Dモデルが出来上がります。この段階で一度出力して確認してみるのも良いでしょう。

この後は一度QGISに戻ります。

# 国土地理院の航空写真を貼り付けたモデルを生成する

QGISはさまざまな地理空間情報を扱う事が出来ます。国土地理院で公開している航空写真（または衛星写真）を標高データに重ね合わせてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/c3914316-e200-d271-bc86-852dcb13c51a.png)

QGISのブラウザから「XYZ Tiles」を右クリックして「新規接続」を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/2ec11d23-ab10-948f-d6e7-d06920a5e27c.png)

必要なのはタイトルと読み込む画像タイルのURLの2つです。ここでは以下のようにします。

| タイトル（例） | URL |
|:-----------:|:------------:|
| 地理院地図（シームレス航空写真） | `https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg`|

[地理院画像タイル](https://maps.gsi.go.jp/development/ichiran.html)は他にもさまざまな種類があります。

<details><summary>タイル適用例</summary>

<img width="231" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/758279a4-69af-ad34-38d0-fd0ec5fee0cd.png">
<img width="220" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/4ed5426f-ebdf-b6d6-9afb-455c289dc82a.png">
<img width="220" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/7af51032-1ccb-6d3b-01aa-00ddf3a89a3f.png">

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/758279a4-69af-ad34-38d0-fd0ec5fee0cd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/4ed5426f-ebdf-b6d6-9afb-455c289dc82a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/7af51032-1ccb-6d3b-01aa-00ddf3a89a3f.png)

:::note info
赤色立体地図はアジア航測株式会社の特許（第3670274号等）を使用しています。
:::

</details>

----

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/dc336f19-2bc0-47e0-64ad-8288dc3864ad.png)

無事に航空写真が背景に読み込まれたでしょうか。航空写真のレイヤを上に持っていくことで最終的な3D表示上でもテクスチャが反映されるようになります。

----

最後の仕上げです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/0d57d168-397f-6f73-0650-f16d9f344293.png)

出力される地形とテクスチャは正方形かつQGISのプレビュー範囲で生成されるため、QGISのプレビューを正方形に近づけ、読み込みたい領域が可能な限り収まるようにしてから Qgis2threejs を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/2fee340c-4560-1cc0-2f99-4cd1aa7b464f.png)

それなりの解像度で地形を再現できたのではないでしょうか。

先にも触れたとおり、この Qgis2threejs の画面から「File」→「Save Scene As」でglTF形式で出力することで Blender などでインポートできるようになります。

以上で完成です。

:::note info
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/aab9ed34-d975-9cc7-dcd8-55f24a8daaa0.png)
Blender で読み込んだ地形データは実寸になっているため、ビューの終了距離を100000m以上にしましょう
:::

----

# 課題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/39c4a815-8348-1c80-7f6d-3136ea89de40.png)

今回の手順では1回の作業でそれなりに十分な解像度で地形を再現することを目標としましたが、実際の10mメッシュ標高データはもっと高解像度です。画像は佐渡金山で有名な相川を拡大して Qgis2threejs で表示させたものですが 、5mメッシュほどではないものの小さな谷・沢までデータに含まれていることがわかります。

より高解像度で生成したい場合はメッシュごとに出力し、Blender 側でくっつけるなどの手間が必要になるのが課題となります。

----

今回の手順でQGISに都府県単位より広い範囲で数値標高データのXMLメッシュファイルを読み込ませることができません。QGISのマニュアルも参照しましたが設定があるのかどうかはわかりませんでした。せめて QuickDEM4JP でセルサイズを増やす設定があればよいのですが…

# それでも都府県単位で読ませたい

2024年時点のハイエンドゲーミングPCでも処理全体に数時間を要しますが、基盤地図情報ビューアを用いることで今回と同じ手順で可能です。表示例は愛知県全域です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/6e71df85-18b3-0537-5094-6291300d2bfd.png)

1. 数値標高データ(DEM-10B)を[基盤地図情報ビューア](https://fgd.gsi.go.jp/download/documents.html)(FGDV.exe)で読み込み → シェープファイル(.shp)で出力
2. QGISでシェープファイルを読み込む
3. [ラスタ] → [解析] → [グリッド（最近傍法）] を実行（パラメータはそのまま）
4. 先の手順と同様にQgis2threejs で表示 → glTFで保存

::: note warn
特にラスタ解析作業はCPU使用率100%が1～数時間続く場合があり、他の作業にも支障が出ます
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985906/aba140c4-dc83-c441-bcff-9f6d2ecf8c0b.png)

山岳にここまで寄ってもきっちり表現できているので、PCに自信がある方は挑戦する価値はあるかも…？
※ Qgis2threejs のテクスチャ解像度(Image width)を8000にしています。