目指すもの
Blenderででっかい佐渡島、眺めたくないっすか?
基盤地図情報として公開されている高解像度の数値標高モデルを用いて、広範囲の地形をそれなりの解像度&1回の作業で Blender へ持っていきます。
サブ目的
検索するとQGISの「3D地図」からobj形式でエクスポートする方法が解説されていますが、その通りに行うとBlender側で崩れてしまう問題を解決します。
画像形式で地形を出力する方法もあるのですが、各ドットが東西南北の直角方向に向いているために谷の形状や山容をうまく表現できなかったり、画像の解像度によって地形が粗くなる問題を解決します。
事前に必要なもの
- 基盤地図情報ダウンロードサービスのアカウント
- QGIS
本記事に基づく成果物は 国土地理院コンテンツ利用規約 に従うものとします
数値標高モデルのダウンロード
国土地理院の基盤地図情報ダウンロードサービスから数値標高モデルをダウンロードします。
画面左上の情報タブはデフォルトで「DEM」タブが選ばれているのでそのままにします。その他の地図データも必要な場合は「基本項目」タグから選ぶこともできますが今回は割愛します。
デフォルトでは解像度の高い5mメッシュが選択されていますが、複数のメッシュを扱う場合は10mメッシュ(10B)を用いることを強く推奨します。
メッシュを選択し終えたら「ダウンロードファイル確認へ」を押して次へ進みます。
「全てチェック」を押して「まとめてダウンロード」しましょう。
10秒ほど待つとダウンロードが始まります。
この画面で一度ログインとアンケートが要求されます。
より良いサービスの実現に貢献するため、アンケートに回答しましょう。
XMLファイルの展開
ダウンロードした"PackDLMap.zip"を展開すると各メッシュごとのzipファイルが格納されています。必要なのはさらにこの中にあるxmlファイルです。作業フォルダを用意し、7zipで「ここに展開」を選ぶと一度で終わらせることができます。
今回は D:\Sado\XML というフォルダにXMLファイルを格納します。
PackDLMap.zip 内に含まれる4つのxmlファイルは不要です。
QGISでの作業
プラグインの導入と設定
「プラグイン」→「プラグインの管理とインストール」から必要なプラグインを検索しインストールします。
プラグイン | 役割 |
---|---|
QuickDEM4JP | 数値標高モデルの読み込み(解説) |
Qgis2threejs | 3Dでの表示とエクスポート |
標高データの読み込み(QuickDEM4JP)
「プロジェクト」→「新規」を選んで新規プロジェクトを開始したら、QuickDEM4JP から数値標高モデルのXMLファイルをインポートします。
QuickDEM4JPの設定は以下の通り。
形式 | 'xml'を含むフォルダ |
DEM | D:\Sado\XML |
出力先 | D:\Sado\Sado.tiff |
CRS ※注 | ESPG:6677 - JGD 2011 |
「CRS」の項目で空間座標系にデフォルトの「ESPG 4326 - WGS 84」を用いてしまうと、この後の作業で意図しない座標にモデルが出現するため、ESPG:6677 - JGD 2011 などの日本測地系を用いてください。右の小さな地球儀アイコンから追加できます。
空間座標系の一覧 : https://lemulus.me/column/epsg-list-gis
読み込みには時間がかかりますので辛抱強く待ちましょう。
成功すれば以下のような画面になります。
3Dモデルの表示(Qgis2threejs)
続いて三角アイコンの Qgis2threejs を開き、3次元ビューで標高データが正しく反映できているか確認しましょう。
「sado」のレイヤーを右クリックして以下プロパティを編集します。
Resampling level | 6 |
Image width | 512, 1024, 2048, 4096 |
Resampling level は地形の細かさを反映します。最高の6にします。
Image width はこの後で追加する航空写真テクスチャの解像度を反映します。多いほど極端に処理が重くなりますので最初はデフォルトの512でいじらず、適宜様子を見ながら上げていくと良いでしょう。
標高のスケール(倍率)を変えたい場合は「Scene」→「Scene Settings」から「Z exaggeration」の値を変更します。
glTF形式での出力
この Qgis2threejs の画面から glTF で出力すれば Blender でも扱える3Dモデルが出来上がります。この段階で一度出力して確認してみるのも良いでしょう。
この後は一度QGISに戻ります。
国土地理院の航空写真を貼り付けたモデルを生成する
QGISはさまざまな地理空間情報を扱う事が出来ます。国土地理院で公開している航空写真(または衛星写真)を標高データに重ね合わせてみましょう。
QGISのブラウザから「XYZ Tiles」を右クリックして「新規接続」を選びます。
必要なのはタイトルと読み込む画像タイルのURLの2つです。ここでは以下のようにします。
タイトル(例) | URL |
---|---|
地理院地図(シームレス航空写真) | https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg |
地理院画像タイルは他にもさまざまな種類があります。
無事に航空写真が背景に読み込まれたでしょうか。航空写真のレイヤを上に持っていくことで最終的な3D表示上でもテクスチャが反映されるようになります。
最後の仕上げです。
出力される地形とテクスチャは正方形かつQGISのプレビュー範囲で生成されるため、QGISのプレビューを正方形に近づけ、読み込みたい領域が可能な限り収まるようにしてから Qgis2threejs を開きます。
それなりの解像度で地形を再現できたのではないでしょうか。
先にも触れたとおり、この Qgis2threejs の画面から「File」→「Save Scene As」でglTF形式で出力することで Blender などでインポートできるようになります。
以上で完成です。
課題
今回の手順では1回の作業でそれなりに十分な解像度で地形を再現することを目標としましたが、実際の10mメッシュ標高データはもっと高解像度です。画像は佐渡金山で有名な相川を拡大して Qgis2threejs で表示させたものですが 、5mメッシュほどではないものの小さな谷・沢までデータに含まれていることがわかります。
より高解像度で生成したい場合はメッシュごとに出力し、Blender 側でくっつけるなどの手間が必要になるのが課題となります。
今回の手順でQGISに都府県単位より広い範囲で数値標高データのXMLメッシュファイルを読み込ませることができません。QGISのマニュアルも参照しましたが設定があるのかどうかはわかりませんでした。せめて QuickDEM4JP でセルサイズを増やす設定があればよいのですが…
それでも都府県単位で読ませたい
2024年時点のハイエンドゲーミングPCでも処理全体に数時間を要しますが、基盤地図情報ビューアを用いることで今回と同じ手順で可能です。表示例は愛知県全域です。
- 数値標高データ(DEM-10B)を基盤地図情報ビューア(FGDV.exe)で読み込み → シェープファイル(.shp)で出力
- QGISでシェープファイルを読み込む
- [ラスタ] → [解析] → [グリッド(最近傍法)] を実行(パラメータはそのまま)
- 先の手順と同様にQgis2threejs で表示 → glTFで保存
特にラスタ解析作業はCPU使用率100%が1~数時間続く場合があり、他の作業にも支障が出ます
山岳にここまで寄ってもきっちり表現できているので、PCに自信がある方は挑戦する価値はあるかも…?
※ Qgis2threejs のテクスチャ解像度(Image width)を8000にしています。