QGISで数値樹冠高モデルから樹頂点を抽出してみよう Part1
はじめに
みなさん、こんにちは。研究開発室の大道です。
私は普段、地理空間情報という位置情報データを活用したデジタルツインの研究開発を行っています。
昨年のCEDEC+KYUSHU2024では「地理空間情報のススメ!オープンデータ×データドリブンなプロシージャル処理による都市の樹木自動配置」というタイトルで講演しました。
このブログでは、その講演時にお話しできなかったQGISの具体的な使い方などをご紹介していきます。
まだまだQGISを使いこなせているわけではありませんが、QGISの理解の助けになれば幸いです。
全部で3パートに分けて、以下の内容を説明する予定です。
- Part1: 航空写真と数値樹冠高モデルを重ねて表示してみよう
- Part2: プロセシングを使って数値樹冠高モデルから樹頂点を抽出してみよう
- Part3: モデルデザイナーを使って樹頂点抽出処理を自動化してみよう
これ以降、便宜上、数値樹冠高モデルを樹冠高モデルと呼称します。
想定読者
- QGISを少し触ったことのある方
- 地理空間情報のデータ活用に興味のある方
- AWS CLIを使ったことがなくても問題ありませんが、事前知識があると楽です
実行環境
- Windows10
- QGIS 3.34.6
航空写真と樹冠高モデルを重ねて表示してみよう
1. 航空写真を表示する
まずはじめに、QGISでなにか地物を表示する時、背景地図を用意して位置関係を確認することが多いと思います。
今回はOpenStreetMapとPLATEAU-Orthoで配信している航空写真を背景地図として使用します。
OpenStreetMapを使用する理由ですが、PLATEAU-Orthoは日本全国の航空写真をカバーしていないので、単体で表示すると何も表示されていないように見えます。
そのため、全体の背景地図としてOpenStreetMapを使用します。
1.1 XYZ Tilesの追加
OpenStreetMapは既にQGISで使用できますが、PLATEAU-Orthoは新規接続が必要です。
QGISを起動して、ブラウザパネルから、[XYZ Tiles]を右クリックして[新規接続]をクリックします。

XYZ接続ウィンドウが表示されるので、以下の項目を入力します。
- 名前:PLATEAU-Ortho
- URL:https://api.plateauview.mlit.go.jp/tiles/plateau-ortho-2024/{z}/{x}/{y}.png
- 最大ズームレベル:19

入力が出来たら、[OK]をクリックします。
すると、ブラウザパネルの[XYZ Tiles]以下に[PLATEAU-Ortho]が追加されているのが確認できます。

1.2 OpenStreetMapとPLATEAU-Orthoの表示
では、[OpenStreetMap]と[PLATEAU-Ortho]をレイヤパネルに追加しましょう。
追加方法はレイヤパネルにドラック&ドロップするか、ダブルクリックするとレイヤパネルに追加できます。
この時、「OpenStreetMap」をレイヤパネルの一番下に配置しましょう。
レイヤパネルのレイヤ同士の入れ替えはドラック&ドロップでできます。

(出典:OpenStreetMap)
追加できたら、講演資料と同様に名古屋市の航空写真を確認しましょう。
地図を拡大すると、航空写真が表示されると思います。

(出典:OpenStreetMap、PLATEAU-Ortho)
Note
XYZ Tilesについて詳しく知りたい方がいましたら、QGISのレイヤに地理院地図や航空写真などの背景地図を追加する方法をおすすめします。
2. 樹冠高モデルを表示する
樹冠高モデルについてですが、講演資料と同様にHigh Resolution Canopy Height Maps by WRI and Metaを使用します。
この樹冠高モデルは深層学習で世界中の樹木の高さを推定したデータです。
タイルごとで区切られているので、非常に多くのデータがあります。
データの仕様に関して簡単にまとめると、
- 高さ:m(メートル)単位
- 解像度:1m
- 空間参照系1:EPSG: 3857
- ズームレベル:9
- 拡張子:GeoTIFF
- ライセンス:CC BY 4.0
となっています。

2.1 名古屋市を含むQuadKeyの確認
では早速、樹冠高モデルを取得していきますが、AWS CLIを利用するため、利用したことがない方はこちらからインストールしてください。
この樹冠高モデルを取得するだけなら、AWSアカウントは必要ありません。
まずは、コマンドプロンプトかPowerShellを起動して、このデータにアクセスしてみましょう。
> aws s3 ls --no-sign-request s3://dataforgood-fb-data/forests/v1/alsgedi_global_v6_float/
すると、いくつかフォルダとデータが表示されたと思います。
PRE chm/
PRE metadata/
PRE msk/
2024-04-16 08:48:20 0
2024-05-08 06:34:03 2014008198 CHM_acquisition_date.tif
2024-04-10 02:26:19 15167629 tiles.geojson
これらの中で今回必要となるのは、以下の2つです。
- chm(フォルダ)
- QuadKeyごとにタイル化された樹冠高モデル
- tiles.geojson(データ)
- QuadKeyが格納されているポリゴン
上記のQuadKeyとは、特定の詳細レベルのタイルを一意に識別できる番号になります。
地図を4分割して左上からZを書くように0、1、2、3と番号を割り当ててタイル番号を作ります。
より細かく分割する時はこれを再帰的に行うことで、すべてのタイルが4進数で表現できます。

(出典:Azure Maps quadkeyインデックスより引用)
今回は名古屋市を含むQuadKeyが知りたいので、tiles.geojsonをダウンロードして番号を確認してみましょう。
> aws s3 cp --no-sign-request s3://dataforgood-fb-data/forests/v1/alsgedi_global_v6_float/tiles.geojson .
ダウンロードしたtiles.geojsonをQGISにドラック&ドロップしてタイルを表示します。

(出典:OpenStreetMap、High Resolution Canopy Height Maps by WRI and Meta)
このとき、タイルが表示されない場合はレイヤパネルの中で「tiles」が一番上になるようにしてください。
また、上図のようにタイル全体を表示したい場合は、レイヤパネルの「tiles」を右クリックして[レイヤの領域にズーム]をクリックするとできます。

このまま名古屋市までズームしてもよいのですが、より楽にQuadKeyを確認するために少し「tiles」のレイヤプロパティを変更します。
レイヤパネルの「tiles」を右クリックして、[プロパティ]をクリックします。
レイヤプロパティのウィンドウから[シンボロジ]タブをクリックして、不透明度を50%に設定します。

次に、[ラベル]タブをクリックして、[単一定義(single)]をクリックします。
設定項目が色々ありますが、今回は以下の3つを変更しましょう。
- 値(Value):[tile]を選択
- [描画]タブ:地物の中に全て収まるラベルのみ描画にチェック
- [バッファ]タブ:テキストバッファを描画にチェック

値(Value):[tile]を選択
[描画]タブ:地物の中に全て収まるラベルのみ描画にチェック

これで地図上にQuadKeyが表示されたと思います。
名古屋市を含むQuadKeyを確認すると、「133002030」だとわかりました。

2.2 樹冠高モデルを取得&表示
先程の手続きで名古屋市を含むQuadKeyが確認できたので、このQuadKeyの樹冠高モデルをダウンロードしましょう。
> aws s3 cp --no-sign-request s3://dataforgood-fb-data/forests/v1/alsgedi_global_v6_float/chm/133002030.tif .
ダウンロードした133002030.tifをQGISにドラック&ドロップして地図上に表示します。

(出典:OpenStreetMap、PLATEAU-Ortho、High Resolution Canopy Height Maps by WRI and Meta)
Note
この樹冠高モデルの詳細に関しては、READMEを参照してください。
> aws s3 cp --no-sign-request s3://dataforgood-fb-data/forests/v1/readme.txt -
また、世界中の樹冠高モデルのほかに、Californiaやsao_pauloなどに絞ったデータや学習モデルなども公開されているので、ご興味のある方は是非利用してみてください。
3. 航空写真と樹冠高モデルを重ねて表示する
ここまで、航空写真と樹冠高モデルをそれぞれ表示しましたが、地理空間情報はデータを重ねて可視化を行うことが非常に重要です。
このとき、データを可視化しやすいように表示することも大切です。
なので、樹冠高モデルのレイヤプロパティを編集しましょう。
レイヤパネルにある「133002030」を右クリックして、[プロパティ]をクリックします。
レイヤプロパティのウィンドウから[シンボロジ]タブをクリックして、レンダリングタイプを[単バンド疑似カラー]にします。

それと、[透明度]をクリックして、グローバルな不透明度を50%にします。

変更できたら、適用をクリックして、OKボタンをクリックします。
名古屋城までズームして樹冠高モデルを可視化してみましょう。
レイヤパネルの「133002030」のチェックボックスを切り替えることで、樹木がある場所に樹冠高モデルが重なっていると思います。

(出典:PLATEAU-Ortho)

(出典:PLATEAU-Ortho、High Resolution Canopy Height Maps by WRI and Metaを加工して表示)
おわりに
今回は、QGISで航空写真と樹冠高モデルを重ねて表示するところまでご紹介しました。
樹冠高モデルに関してはデータの取得が大変だったかと思いますが、使いこなせると様々な地域で応用できるかと思います。
次回は、この樹冠高モデルからプロセシングを用いて樹頂点を抽出していきます。
お楽しみに!
- 現実世界の位置を正確に表現するための仕組み・ルールのこと ↩︎