一覧に戻る

csmap-pyでCS立体図をつくる

#Python#GDAL#numpy#foss4g#rasterio

TL;DR

以下のコマンドでCS立体図を作成出来ます。

pip install csmap-py # インストール
csmap dem.tif csmap.tif # 処理実行

あまりよくテスト出来ていないので、フィードバックお待ちしております(Issueまで)。

CS立体図

CS立体図とは、DEMをもとにした地形判読のための地形表現図法です。以下の林野庁の資料が詳しいです。

https://www.rinya.maff.go.jp/j/seibi/sagyoudo/attach/pdf/romou-12.pdf

  • 赤い箇所は凸地形、青い箇所は凹地形
  • 傾斜率が高いと、うっすら茶色っぽい

ざっくりこのような着色をしておくことで、平面上の図面でも地形判読が容易となります。

CS立体図の作成方法

https://github.com/waigania13/CSMapMaker

CS立体図を作成するには、オープンなものだと上記のQGISプラグインに限られていると思われます(弊社代表の作品)。一方、こちらのツールはQGISに内蔵のSAGAに依存しており、そして最近のQGISはSAGAが内蔵されなくなったという問題がありました。なので新しく作りました。

csmap-py

https://github.com/MIERUNE/csmap-py

  • シンプルな依存関係(rasterioとnumpy)
  • 高速
  • 並列処理
  • 省メモリ

使い方

pip install csmap-py # インストール
csmap dem.tif csmap.tif # 処理実行
csmap dem.vrt csmap.tif # 仮想ラスターや、GDALがサポートしているラスターを読める
csmap dem.tif csmap.tif --max_workers 4 # max_workersオプションで並列処理数を設定可能
csmap dem.tif csmap.tif --gf_size 3 --gf_sigma 1.0 --curvature_size 1 # CS立体図作成にまつわるパラメータを変更できる

仕様

  • 入力のDEMに対し、外縁部の一定部分(=ガウシアンフィルタの影響範囲)はトリミングされます
  • No-Dataの部分はあまり気を使っておらず、一定の計算が実行されます
  • 着色はCSMapMakerを参考にしていますが、厳密な再現はしていません
  • パラメータのデフォルト値はCSMapMakerに準拠しています

ベンチマーク

  • 1mDEM, 解像度17602x6794, 10個のTIFFファイルから成る仮想ラスターを処理
  • Macbook Air M2
time csmap merged.vrt csmap.tif --max_worker 1

real	0m29.345s
user	0m27.055s
sys	0m3.457s

time csmap merged.vrt csmap.tif --max_worker 16

real	0m10.848s
user	0m43.075s
sys	0m5.517s

謝辞

本ツールは、「SAGA依存しないでNumpyで書けばいいんじゃない、しらんけど(意訳)」というわたしの雑なSlack投稿を拾ってコア部分(SAGAでやってる処理のNumpy実装)を書いてくれた@ciscornさんとのゆるいコールアンドレスポンスにより出来ています、感謝。