🌎

地形の高さ (DEM, DSM, nDSM) を点群データ(オープンナガサキ)から生成する

2023/09/23に公開

高さ情報とは?

建物の高さを知りたいな〜と思っていても、、、
測量や衛星データを扱っている人はご存知の人も多いですが、皆さんの想像上以上に考慮することが多いです。

まず大切なことはどこからの高さなのかということです。
この常識は分野や前提ごとに変わるので意識しなければなりません。


以下より引用
https://www.gsi.go.jp/buturisokuchi/grageo_geoid.html

ざっくりと以下まで考慮できれば十分だと思います。

  • 地球楕円体
  • ジオイド
  • 標高
  • 地表面測量

全て考えていたら正確かもしてませんがそれだけやることは増えます。
そろぞれの目的にあった高さ情報を利用しましょう。

DEM: Digital Terrain Model DSM: Digital Surface Model

  • DEM (Digital Terrain Model)とは、海面 からの地面の高さで、標高のことです。
  • DSM (Digital Surface Model)とは、地表面の物体を含む高さのことです。


以下より引用
https://www.aw3d.jp/glossary/

nDSM: Normalized Digital Surface Model

今回は nDSM と言って建物や樹木などの直感的な地表面の地物の高さを示します。
英語では、 Normalized Digital Surface Model のことです。

こちらの図が理解しやすいと思います。

以下より引用
https://up42.com/blog/ndsms-how-digital-surface-models-and-digital-terrain-models-elevate-your

点群データ

https://ja.wikipedia.org/wiki/点群_(データ形式)

利用する点群データの紹介です。

オープンナガサキ

長崎県が点群データを C.C ライセンスで無償公開してくれています。
今回はこの点群データを利用して DSM を計算していきます。
https://opennagasaki.nerc.or.jp/

この点群は RIDAR というレーザー測量によって計測されています。
https://ja.wikipedia.org/wiki/LIDAR

場所は長崎県長崎市の長崎駅です。

The ナガサキ!

可視化

可視化には CloudCompare を利用しました。

https://www.danielgm.net/cc/

あらゆる角度や距離から可視化が可能です。


3D 可視化は楽しいですね!

位置情報

オープンナガサキのデータには位置情報も付与されています。

QGIS を使って可視化します。
https://qgis.org/ja/site/

しかしながら、オープンナガサキの位置情報は座標情報が長崎になっていないので修正します。

こちらは点群の地理空間処理の PDAL を使用します。
Point データの GDAL ですね!

https://pdal.io/en/latest/

PATH_LAS = '****_org.las'
PATH_LAS_T = PATH_LAS.replace('.las', '_trandlate.las')

# 長崎は EPSG:6669
!pdal translate -i {PATH_LAS} -o {PATH_LAS_T} --writers.las.a_srs="EPSG:6669"

では可視化します。

長崎駅も場所も正しく細部まで見えています。

Z軸の取得

この点群データで XY軸 は地理空間の座標で、 Z軸 は地表面の高さ情報になっています。
なので Z軸 から DSM を取得します。

cfg.json を以下で保存します。

{
  "pipeline":[
    {
        "type":"readers.las",
        "filename":"****_org_trandlate.las"
    },
    {
      "type":"writers.gdal",
      "filename":"****_org_trandlate_dsm.tif",
      "dimension":"Z",
      "data_type":"float32",
      "output_type":"mean",
      "resolution": 1.0
    }
  ]
}

この設定情報を利用して PDAL のパイプライン処理を行います。

pdal pipeline ./cfg.json -v 1

Python で可視化します。


import matplotlib.pyplot as plt
import tifffile

PATH_DSM = '****_org_trandlate_dsm.tif'

img = tifffile.imread(PATH_DSM)
img[img < 0.5] = 0.5

plt.figure(figsize=(20,12), facecolor='w')
plt.imshow(img)
plt.colorbar()
plt.savefig('dsm.png')
plt.show();

建物が 20 ~ 30m でそれっぽい値が取得できていますね!
これが DSM になります。

地物の高さ

nDSM を計算しましょう。

DEM の取得

さて、ここで nDSM を取得するために DEM を求めます。

今回は解像度が高く、 C.C 4.0 ライセンスの 国土地理院DEM を使用します。

https://fgd.gsi.go.jp/download/menu.php

場所は運悪く、2面に重複しているの2つ取得します。


DEM を可視化します。

DEM( 青色 ) と点群データを可視化します。


次に、 DEM を切り抜きます。

点群の位置座標と画像のサイズを QGIS で見てみます。

gdalwarp -te 34000.0000000000000000 -27750.0000000000000000 34999.9899999999979627 -27000.0000000000000000 \
    -te_srs EPSG:6669 -t_srs EPSG:6669 -ts 1001 751 \
    ****_org_trandlate_dsm.tif dem_crop.tif

切り抜いた DEM( 赤色 ) を可視化します。

nDSM の計算

nDSM := DSM - DEM

を実装します。

dem = tifffile.imread(PATH_DEM)
dsm = tifffile.imread(PATH_DSM)

n_dem = dsm - dem
n_dem[n_dem < 0] = 0

tifffile.imwrite(PATH_nDSM, n_dem)

では、nDSM( 緑色 ) を可視化します。

地表面の地物だけの高さを取得できました!

nDSM による 3D 可視化

以下の以前の記事の方法で 3D 可視化をして確認してみます。
https://zenn.dev/syu_tan/articles/74f2a3df09c888

Google Map

Google Map での可視化を行います。建物の光学情報が確認できます。

動画だとよく分かりますね。県庁?かながかなり高いですね。

DEM( 赤色 ) も同時に可視化してみると、補正された部分がわかります。

衛星データ

Sentinel-2 という光学衛星で可視化します。

https://apps.sentinel-hub.com/eo-browser/?zoom=16&lat=32.75146&lng=129.86995&themeId=DEFAULT-THEME&visualizationUrl=https%3A%2F%2Fservices.sentinel-hub.com%2Fogc%2Fwms%2Fbd86bcc0-f318-402b-a145-015f85b9427e&datasetId=S2L2A&fromTime=2023-08-27T00%3A00%3A00.000Z&toTime=2023-08-27T23%3A59%3A59.999Z&layerId=1_TRUE_COLOR&demSource3D="MAPZEN"

aws s3 cp s3://sentinel-s2-l2a/tiles/52/S/EB/2023/8/27/0/ . --recursive --request-payer requester

上記で AWS の S3 から取得可能です。

長崎駅あたりはこんな感じです。

バンド8 (近赤外)を 3D 可視化します。

人工物などの金属が白色で明るくなっていますね。

衛星データと点群データでこのような解析ができます。

まとめ

nDSM の求め方とその利用例、他のデータとの解析・可視化を行いました。
点群データや衛星データの 近未来のデータ を活用して新しい解析をしていきたいですね!

これらを利用することで、建物の数がわかると都市の発展具合、開発状況がよくわかります。
他にも地形変化や自然災害、カーナビへの利用などワクワクしますね!

最後まで読んでいただきありがとうございます!*
皆さんのお役に立てられると光栄です。

おまけ

こちら以外にも記事執筆をしているのでご参考になれば幸いです
https://zenn.dev/syu_tan

衛星データ解析として、宙畑のライターもしています。
https://sorabatake.jp/?s=秀輔

SAR 解析をよくやっていますが、地理空間や衛星データ、点群データに関心があります。
勉強している人は好きなので楽しく絡んでくれると嬉しいです。
https://twitter.com/emmyeil

Discussion