Grid
RasterModelGrid などの格子を使い、DEM・水深・流量・土砂量などを同じ座標系上で扱います。GeoTIFF DEMを読み込む場合も、標高配列をノード値として登録する構成にできます。
Python / Landlab / Terrain & Hydrology Modeling
Landlabは、地形・水文・地形変化モデルをPythonで組み立てるためのオープンソースライブラリです。 このページでは、DEMを使った流向・集水面積計算から、流域地形量、降雨流出、侵食・堆積、教育用コードまでを、図入りで整理します。
Overview
Landlabは、格子、変数フィールド、物理プロセス部品を組み合わせて、地表面プロセスの数値モデルを作るためのPythonパッケージです。 DEMを使った流域解析、流向・集水面積計算、表面流、侵食・堆積モデルのプロトタイプに利用できます。
RasterModelGrid などの格子を使い、DEM・水深・流量・土砂量などを同じ座標系上で扱います。GeoTIFF DEMを読み込む場合も、標高配列をノード値として登録する構成にできます。
標高 topographic__elevation、集水面積 drainage_area、水深 surface_water__depth などを grid.at_node / grid.at_link に保持します。途中計算を可視化しやすい点が教育・検証に向いています。
FlowAccumulator、OverlandFlow、LinearDiffuser、FastscapeEroder などのコンポーネントを組み合わせ、流域解析・流出解析・地形変化モデルを段階的に試作できます。
Basic Sample
最小構成では、人工DEMまたはGeoTIFF DEMを読み込み、D8方向で流向を決め、各格子点の集水面積を計算します。
実データに置き換える場合は、DEMの標高配列を topographic__elevation に設定し、境界条件を流域出口に合わせて調整します。
Use Cases
Landlabを単なるライブラリ紹介ではなく、demo.godo-tys.jp上で「地形・水文解析の入口」として使えるよう、5つの利用例を図入りで整理しました。
01
GeoTIFFなどのDEMをLandlabのRasterModelGridに載せ、FlowAccumulatorで各セルの流下先、流向、集水面積、流量相当量を計算する基本サンプルです。QGISやArcGISで作成した流域界・河道線と比較しながら、谷線・合流点・流域出口の妥当性を確認できます。
02
勾配、集水面積、曲率、谷線密度、標高差、地形湿潤度のような指標を組み合わせ、崩壊危険度、土砂供給域、斜面流出域、河道への接続性を試作的に評価する使い方です。実務モデルに入れる前の仮説確認や説明資料作成に向いています。
03
降雨ハイエトグラフ、表面水深分布、流下集中域、流域出口ハイドログラフの関係を、Pythonコードで段階的に確認する教育用サンプルです。OverlandFlowやキネマティックウェーブ型モデルに進む前の概念理解に使えます。
04
流量・勾配に応じた侵食、斜面拡散、堆積傾向を簡易的に計算し、河床変動・地形変化モデルの研究開発に展開します。
05
DEM入力からGrid作成、流向・集水、流出、侵食、結果図作成までを1本のPythonコードで説明する教材向けの構成です。
Detailed Explanation
このサンプルの目的は、DEMから水がどちらへ流れるかを決め、下流側へ集水面積を累積して、谷線・合流点・流域出口を確認することです。Landlabでは、FlowDirectorが流下方向を決め、FlowAccumulatorがその流向に沿って集水面積や流量相当量を累積します。
| 名称 | 区分 | 説明 |
|---|---|---|
topographic__elevation | 入力 | 各ノードのDEM標高。実DEMではGeoTIFFやASCII Gridから読み込む。 |
flow__receiver_node | 出力 | 各ノードから見た流下先ノード。流向ネットワークの基本になる。 |
drainage_area | 出力 | そのノードに集まる上流面積。谷線・河道候補・出口判定に使う。 |
topographic__steepest_slope | 出力 | 最急勾配。斜面流出、侵食、危険度指標の基礎量になる。 |
平面直角座標系などm単位のDEMを使うと、集水面積や勾配の意味を整理しやすくなります。
地形に窪地が多い場合は、窪地処理、境界条件、流向方式の選択によって結果が大きく変わります。
QGISやArcGISで抽出した河道線と、Landlabで計算した集水面積の大きいセルを重ねると、DEM品質や流域界の不整合を確認できます。
Detailed Explanation
流向・集水面積を計算した後は、勾配、曲率、集水面積、標高差、谷密度、流下距離などを組み合わせ、流域の特徴を数値指標として整理できます。砂防、斜面崩壊、土砂生産、河床変動、雨水流出の前処理として、どの場所が水や土砂を集めやすいかを把握する段階です。
| 名称 | 区分 | 説明 |
|---|---|---|
勾配 | 斜面の急さ | 斜面流速、侵食ポテンシャル、崩壊危険度の基礎量。 |
集水面積 | 水の集まりやすさ | 谷線、河道候補、土砂流下経路、出口流量の概略把握に利用。 |
曲率・局所起伏 | 地形の凹凸 | 谷頭、尾根、凹地、遷急線などの抽出に利用。 |
χ指標・急峻度指標 | 河川地形の比較 | 流域間の侵食傾向や河道縦断形の比較に利用。 |
Landlabは解析ロジックをPythonで確認できるため、業務用GIS処理の前に指標の作り方を試す用途に向いています。
地形指標だけで危険度を断定せず、降雨、地質、土地利用、過去災害、現地状況と組み合わせて評価します。
しきい値を固定せず、複数ケースの比較図を作ると、説明資料として理解しやすくなります。
Detailed Explanation
このサンプルでは、RasterModelGrid上の地形に降雨を与え、表面水が斜面を流下して流域出口に集まる過程を学習します。降雨強度、継続時間、粗度係数、地形勾配、流域形状を変えながら、表面水深分布と流域出口ハイドログラフの変化を確認します。
| 名称 | 区分 | 説明 |
|---|---|---|
rainfall__flux | 入力 | 降雨強度。mm/hrをm/sなどに変換して時間ループに与える。 |
surface_water__depth | 状態量 | 各ノードの表面水深。最大水深図や残留水深図に利用。 |
surface_water__discharge | 状態量 | リンク方向または単位幅流量として扱う流れの強さ。 |
water_surface__gradient | 状態量 | 水面勾配。流下方向や流量更新に関係する。 |
短時間強雨ではピークが立ちやすく、長時間降雨では総流出量や逓減部の違いが見えやすくなります。
粗度係数を大きくすると流速が遅くなり、ピーク到達が遅れる傾向を学習できます。
実務解析では、浸透、土地利用別粗度、河道、下水道、堤防、道路盛土などを別途扱う必要があります。
Sample Figures
以下のPNGを public/demo-data/landlab/ に追加しました。Astroでビルドすると、そのままLandlabページに表示されます。
Practical Notes
Landlabは、HEC-RASやQGISのような完成済み実務GUIではなく、Pythonで地形・水文プロセスを分解して確認するための研究・教育・試作用ライブラリとして扱うと使いやすいです。 実務では、QGIS/ArcGISで整備したDEM・流域界・河道線・土地利用等を入力し、Landlabで流向・集水・地形変化の考え方を検証する構成が現実的です。
「公式・設計計算」ではなく、解析ロジックの説明、モデル化方針の検討、Python教材、研究開発の初期検証に向いています。 その後、必要に応じて2次元河床変動、洪水氾濫、土砂移動などの専用モデルへ接続します。
Python Source Sample
既存の入門サンプルに加えて、流向・集水面積、地形量、降雨流出、侵食・堆積までをまとめて説明できる拡張サンプルコードを追加しました。
実行環境には landlab、numpy、matplotlib が必要です。実DEMを使う場合は rasterio 等でGeoTIFFを読み込む構成に拡張します。
読み込み中... 読み込み中...
PythonソースはHTMLへ直接埋め込まず、public/code/landlab/ 配下の外部 .py ファイルとして公開しています。
HTML側は fetch() で読み込んで表示するだけなので、ソースの差し替え・ダウンロード・Git管理がしやすくなります。
References
Landlabの詳細は、公式ドキュメント、チュートリアル、APIリファレンス、GitHubを参照してください。 FlowAccumulatorとFlowDirectorは流向・集水面積計算、OverlandFlowは降雨流出・表面流、ChiFinderやSteepnessFinderは流域地形量解析の参考になります。