Python / Landlab / Terrain & Hydrology Modeling

Landlab 概要・Pythonサンプル

Landlabは、地形・水文・地形変化モデルをPythonで組み立てるためのオープンソースライブラリです。 このページでは、DEMを使った流向・集水面積計算から、流域地形量、降雨流出、侵食・堆積、教育用コードまでを、図入りで整理します。

LandlabによるDEM流向・集水面積の計算例

Landlabとは

Landlabは、格子、変数フィールド、物理プロセス部品を組み合わせて、地表面プロセスの数値モデルを作るためのPythonパッケージです。 DEMを使った流域解析、流向・集水面積計算、表面流、侵食・堆積モデルのプロトタイプに利用できます。

Grid

RasterModelGrid などの格子を使い、DEM・水深・流量・土砂量などを同じ座標系上で扱います。GeoTIFF DEMを読み込む場合も、標高配列をノード値として登録する構成にできます。

Fields

標高 topographic__elevation、集水面積 drainage_area、水深 surface_water__depth などを grid.at_node / grid.at_link に保持します。途中計算を可視化しやすい点が教育・検証に向いています。

Components

FlowAccumulator、OverlandFlow、LinearDiffuser、FastscapeEroder などのコンポーネントを組み合わせ、流域解析・流出解析・地形変化モデルを段階的に試作できます。

入門サンプルの考え方

最小構成では、人工DEMまたはGeoTIFF DEMを読み込み、D8方向で流向を決め、各格子点の集水面積を計算します。 実データに置き換える場合は、DEMの標高配列を topographic__elevation に設定し、境界条件を流域出口に合わせて調整します。

  • RasterModelGridで2次元格子を作成
  • 標高データをLandlabのfieldとして登録
  • 境界条件を設定し、流出先を明確化
  • FlowAccumulatorで流向・集水面積を計算
  • 地形量、流出、侵食・堆積へ段階的に拡張
RasterModelGridと集水面積の概念図
RasterModelGrid上で流向を求め、下流へ向かって集水面積を累積するイメージです。

追加した5つの利用例

Landlabを単なるライブラリ紹介ではなく、demo.godo-tys.jp上で「地形・水文解析の入口」として使えるよう、5つの利用例を図入りで整理しました。

01

DEMを使った流向・集水面積の計算

GeoTIFFなどのDEMをLandlabのRasterModelGridに載せ、FlowAccumulatorで各セルの流下先、流向、集水面積、流量相当量を計算する基本サンプルです。QGISやArcGISで作成した流域界・河道線と比較しながら、谷線・合流点・流域出口の妥当性を確認できます。

  • DEMを topographic__elevation に登録し、投影座標系の格子間隔をm単位で扱う
  • D8、D4相当の最急勾配、複数流向など、目的に応じてFlowDirectorを選択する
  • flow__receiver_node、flow__upstream_node_order、drainage_areaを使って流下ネットワークを確認する
  • 集水面積しきい値から谷線・河道候補を抽出し、既存河道データや現地知見と照合する
  • 閉境界・開境界の設定により、流域外へ不自然に流れないように調整する
DEMを使った流向・集水面積の計算のサンプル図
DEMを使った流向・集水面積の計算のWeb掲載用サンプル図

02

流域解析・地形量解析のプロトタイプ

勾配、集水面積、曲率、谷線密度、標高差、地形湿潤度のような指標を組み合わせ、崩壊危険度、土砂供給域、斜面流出域、河道への接続性を試作的に評価する使い方です。実務モデルに入れる前の仮説確認や説明資料作成に向いています。

  • 勾配・集水面積・曲率・標高差を重ね、斜面と谷地形の関係を整理する
  • 谷頭部、急勾配斜面、集水しやすい斜面、土砂供給源候補を抽出する
  • ChiFinderやSteepnessFinderなどの地形解析コンポーネントへ発展させられる
  • 砂防・斜面流出・土砂生産・河床変動モデルの前処理として利用する
  • 出力をPNG、CSV、GeoTIFF、GeoJSONに変換し、QGISやWeb地図で確認する
流域解析・地形量解析のプロトタイプのサンプル図
流域解析・地形量解析のプロトタイプのWeb掲載用サンプル図

03

降雨流出・表面流モデルの学習用サンプル

降雨ハイエトグラフ、表面水深分布、流下集中域、流域出口ハイドログラフの関係を、Pythonコードで段階的に確認する教育用サンプルです。OverlandFlowやキネマティックウェーブ型モデルに進む前の概念理解に使えます。

  • 降雨強度・継続時間・休止時間を変えて、ピーク流量、到達時間、逓減部を比較する
  • surface_water__depth、surface_water__discharge、water_surface__gradientなどの意味を整理する
  • 地形勾配、粗度係数、流域形状がハイドログラフへ与える影響を確認する
  • 表面水深、最大水深、流量分布、流下経路を図として保存する
  • 実流域DEM、レーダー雨量、土地利用別粗度、浸透モデルへ拡張する入口にする
降雨流出・表面流モデルの学習用サンプルのサンプル図
降雨流出・表面流モデルの学習用サンプルのWeb掲載用サンプル図

04

侵食・堆積・河床変動モデルの研究開発

流量・勾配に応じた侵食、斜面拡散、堆積傾向を簡易的に計算し、河床変動・地形変化モデルの研究開発に展開します。

  • StreamPower系、Fastscape系、ErosionDeposition系の試作に利用
  • 地形変化量 dz を出力し、侵食域・堆積域を図化
  • 河床材料・土砂供給・地形更新モデルの前段検証に利用
  • Landlabで概念検証後、実務向け2次元河床変動モデルへ接続
侵食・堆積・河床変動モデルの研究開発のサンプル図
侵食・堆積・河床変動モデルの研究開発のWeb掲載用サンプル図

05

Pythonによる地形・水文解析コードの教育・説明資料

DEM入力からGrid作成、流向・集水、流出、侵食、結果図作成までを1本のPythonコードで説明する教材向けの構成です。

  • 社内研修・大学演習・技術ブログ向けに使いやすい
  • コードと図を対応させ、処理手順を追いやすくする
  • QGIS・ArcGISの前処理結果をPythonで検証する教材にも展開可能
  • demo.godo-tys.jp上で、説明資料とソースを同時に公開できる
Pythonによる地形・水文解析コードの教育・説明資料のサンプル図
Pythonによる地形・水文解析コードの教育・説明資料のWeb掲載用サンプル図
01

DEMを使った流向・集水面積の計算を詳しく見る

このサンプルの目的は、DEMから水がどちらへ流れるかを決め、下流側へ集水面積を累積して、谷線・合流点・流域出口を確認することです。Landlabでは、FlowDirectorが流下方向を決め、FlowAccumulatorがその流向に沿って集水面積や流量相当量を累積します。

処理手順

  1. GeoTIFF DEMを読み込み、NoData処理、投影座標系、格子間隔、単位を確認する
  2. RasterModelGridを作成し、DEMの標高値を topographic__elevation として登録する
  3. 流域外周や下流端に合わせて、閉境界・開境界を設定する
  4. FlowAccumulatorを実行し、flow__receiver_node、flow__link_to_receiver_node、drainage_areaを取得する
  5. 集水面積のしきい値を変えながら、谷線候補、支川合流点、流域出口を図化する

主な入力・出力・指標

名称 区分 説明
topographic__elevation 入力 各ノードのDEM標高。実DEMではGeoTIFFやASCII Gridから読み込む。
flow__receiver_node 出力 各ノードから見た流下先ノード。流向ネットワークの基本になる。
drainage_area 出力 そのノードに集まる上流面積。谷線・河道候補・出口判定に使う。
topographic__steepest_slope 出力 最急勾配。斜面流出、侵食、危険度指標の基礎量になる。

平面直角座標系などm単位のDEMを使うと、集水面積や勾配の意味を整理しやすくなります。

地形に窪地が多い場合は、窪地処理、境界条件、流向方式の選択によって結果が大きく変わります。

QGISやArcGISで抽出した河道線と、Landlabで計算した集水面積の大きいセルを重ねると、DEM品質や流域界の不整合を確認できます。

02

流域解析・地形量解析のプロトタイプを詳しく見る

流向・集水面積を計算した後は、勾配、曲率、集水面積、標高差、谷密度、流下距離などを組み合わせ、流域の特徴を数値指標として整理できます。砂防、斜面崩壊、土砂生産、河床変動、雨水流出の前処理として、どの場所が水や土砂を集めやすいかを把握する段階です。

処理手順

  1. DEMから勾配、局所起伏、曲率、集水面積を作成する
  2. 集水面積しきい値により谷線・河道候補を抽出する
  3. 急勾配かつ集水面積が一定以上の場所を、土砂供給域や流下集中域の候補として整理する
  4. 流域界、保全対象、既往災害位置、土地利用、地質などと重ねて仮説を検証する
  5. 解析結果をGeoTIFF、GeoJSON、CSVとして出力し、GISやWeb地図で説明できる形にする

主な入力・出力・指標

名称 区分 説明
勾配 斜面の急さ 斜面流速、侵食ポテンシャル、崩壊危険度の基礎量。
集水面積 水の集まりやすさ 谷線、河道候補、土砂流下経路、出口流量の概略把握に利用。
曲率・局所起伏 地形の凹凸 谷頭、尾根、凹地、遷急線などの抽出に利用。
χ指標・急峻度指標 河川地形の比較 流域間の侵食傾向や河道縦断形の比較に利用。

Landlabは解析ロジックをPythonで確認できるため、業務用GIS処理の前に指標の作り方を試す用途に向いています。

地形指標だけで危険度を断定せず、降雨、地質、土地利用、過去災害、現地状況と組み合わせて評価します。

しきい値を固定せず、複数ケースの比較図を作ると、説明資料として理解しやすくなります。

03

降雨流出・表面流モデルの学習用サンプルを詳しく見る

このサンプルでは、RasterModelGrid上の地形に降雨を与え、表面水が斜面を流下して流域出口に集まる過程を学習します。降雨強度、継続時間、粗度係数、地形勾配、流域形状を変えながら、表面水深分布と流域出口ハイドログラフの変化を確認します。

処理手順

  1. 格子地形、境界条件、初期水深、Manning粗度係数を設定する
  2. 降雨ハイエトグラフを作成し、各時刻の降雨強度を入力する
  3. OverlandFlowまたは簡易キネマティックウェーブ型の処理で水深・流量を更新する
  4. 流域出口の流量を時系列として記録し、ハイドログラフを作成する
  5. 最大水深、最終水深、流量分布、流下集中域、ピーク流量、到達時間を比較する

主な入力・出力・指標

名称 区分 説明
rainfall__flux 入力 降雨強度。mm/hrをm/sなどに変換して時間ループに与える。
surface_water__depth 状態量 各ノードの表面水深。最大水深図や残留水深図に利用。
surface_water__discharge 状態量 リンク方向または単位幅流量として扱う流れの強さ。
water_surface__gradient 状態量 水面勾配。流下方向や流量更新に関係する。

短時間強雨ではピークが立ちやすく、長時間降雨では総流出量や逓減部の違いが見えやすくなります。

粗度係数を大きくすると流速が遅くなり、ピーク到達が遅れる傾向を学習できます。

実務解析では、浸透、土地利用別粗度、河道、下水道、堤防、道路盛土などを別途扱う必要があります。

サンプル図ギャラリー

以下のPNGを public/demo-data/landlab/ に追加しました。Astroでビルドすると、そのままLandlabページに表示されます。

DEM・流向・集水面積の図
DEM・流向・集水面積
流域・地形量指標の図
流域・地形量指標
降雨流出・ハイドログラフの図
降雨流出・ハイドログラフ
侵食・堆積・河床変動の図
侵食・堆積・河床変動
教育・説明用ワークフローの図
教育・説明用ワークフロー

実務プロトタイプに使う場合の整理

Landlabは、HEC-RASやQGISのような完成済み実務GUIではなく、Pythonで地形・水文プロセスを分解して確認するための研究・教育・試作用ライブラリとして扱うと使いやすいです。 実務では、QGIS/ArcGISで整備したDEM・流域界・河道線・土地利用等を入力し、Landlabで流向・集水・地形変化の考え方を検証する構成が現実的です。

  • GeoTIFF DEMをrasterioで読み込み、LandlabのRasterModelGridに変換する
  • JGD2011平面直角座標系など、m単位の座標系で格子間隔と面積を管理する
  • QGIS / ArcGISで作成した流域界、河道線、保全対象、土地利用を重ね合わせる
  • 解析結果をPNGだけでなく、GeoTIFF、CSV、GeoJSONとして出力する
  • 実務用の洪水氾濫、土砂流出、河床変動モデルに渡す前処理として活用する

おすすめの使い分け

「公式・設計計算」ではなく、解析ロジックの説明、モデル化方針の検討、Python教材、研究開発の初期検証に向いています。 その後、必要に応じて2次元河床変動、洪水氾濫、土砂移動などの専用モデルへ接続します。

データ処理フロー例

  1. QGIS/ArcGISでDEM、流域界、河道線を準備
  2. PythonでDEMを読み込み、Landlab gridへ変換
  3. FlowAccumulatorで流向・集水面積を確認
  4. 必要に応じて表面流・侵食・堆積モデルを追加
  5. PNG、CSV、GeoTIFF、GeoJSONとしてWebサイトやGISへ出力

Landlabサンプルコード

既存の入門サンプルに加えて、流向・集水面積、地形量、降雨流出、侵食・堆積までをまとめて説明できる拡張サンプルコードを追加しました。 実行環境には landlabnumpymatplotlib が必要です。実DEMを使う場合は rasterio 等でGeoTIFFを読み込む構成に拡張します。

PythonソースはHTMLへ直接埋め込まず、public/code/landlab/ 配下の外部 .py ファイルとして公開しています。 HTML側は fetch() で読み込んで表示するだけなので、ソースの差し替え・ダウンロード・Git管理がしやすくなります。

参考リンク

Landlabの詳細は、公式ドキュメント、チュートリアル、APIリファレンス、GitHubを参照してください。 FlowAccumulatorとFlowDirectorは流向・集水面積計算、OverlandFlowは降雨流出・表面流、ChiFinderやSteepnessFinderは流域地形量解析の参考になります。