チュートリアル: GRASSツールを用いて河川と集水域の境界線を求める

Site: OpenCourseWare for GIS
Course: QGIS上級者向けチュートリアル
Book: チュートリアル: GRASSツールを用いて河川と集水域の境界線を求める
Printed by: Guest user
Date: Saturday, 21 December 2024, 8:48 PM

1. 概要

QGIS Processing Toolbox を使用すると、多くの有用な GRASS アルゴリズムを使用することができます。

このチュートリアルでは、GRASS ツールを使用して、Rur川とその集水域の境界線を作成します。

このチュートリアルの後、以下のことができるようになります。

  • シンク(Sinks)を埋め立てて水文学的に正しいDEMを作成する。
  • 流量を計算する
  • 流量のしきい値を使用して、河川を定義します。
  • 集水域の流出口を定める

チュートリアルデータは、SRTM 1-Arc Second DEMをクリップし、UTM Zone 32N/WGS-84に再投影したものです。


2. DEMのシンク(Sinks)を埋め立てる

最初のステップはDEMのシンク(Sinks)を埋め立てることです。シンクとは人工的な窪地のことでそれは水が流出口へと流れるのを阻害するものです。

1. QGIS Desktop with GRASSを起動します。

2. dem.tif をレイヤパネルに追加します。

3. プロセッシングツールボックスパネルを開きます。メインメニューのプロセッシング | ツールボックスと進みます。

4. プロセッシングツールボックスで GRASS | ラスタ (r.*) | r.fill.dirtと進みます。

5. r.fill.dirダイアログでDEMレイヤを標高として選択します。方位角の形式で出力のフォーマットはデフォルトのgrassのままにしておきます。窪地なしDEMの出力DEM_filled.tifとして保存し(必ずGeoTiffを選択してください)、他の出力レイヤーのチェックは不要なので全て外してください。

6. 実行をクリックします。処理が終わったらダイアログを閉じます。処理にはしばらく時間がかかります。ログの赤い警告は無視してください。

こちらでアルゴリズムについてさらに詳細な情報を見ることができます。

7. イヤパネルからDEMレイヤを削除して、次に進むためにDEM_filledレイヤがあるだけの状態にします。

filled DEM


3. 累積流量と排水方向を計算する

次のステップでは埋め立て済みのDEM上の累積流量を計算します。

1. プロセッシングツールボックスで GRASS | ラスタ (r.*) | r.watershedを選択します。

r.watershed ツールには様々な設定があります。GRASSのこのツールのマニュアルのページ でアルゴリズムの設定についてより詳細に学べます。

2. r.watershedダイアログで、標高としてDEM_filledを選択します。外部流域の最小サイズを500ピクセルに設定し、単一フロー(SFD)を使うにチェックを入れます。排水先セルの数の出力accumulation.tif に保存し、排水方向の出力flowdir.tif に保存します。他の出力は不要なのでチェックを外しておきます。

r.watershed dialogue

3. 実行をクリックします。処理が終わったらダイアログを閉じます。赤色の警告は無視してください。

流向レイヤは、GRASSの定義を用いてエンコードされています。排水は、北東方向の1から始まる反時計回りに番号が振られた8つの方向です。値0は、セルが窪地であることを示します。負の値は、地表流出が現在の地理的領域の境界を離れていることを示しています。これらの負のセルの絶対値は、流れの方向を示しています。したがって、flowdirレイヤを絶対値に変換する必要があります。

4. メインメニューでラスタ | ラスタ計算機と進みます。

5. ラスタ計算機で次の色を設定します。

( "flowdir@1" < 0 ) * -1 * "flowdir@1" + ( "flowdir@1" >= 0 ) * "flowdir@1"

この式は、次のように理解できます:流れの方向の値がゼロよりも小さい場合、結果はブール値True (1)であり、そうでない場合はブール値False (0)です。これに-1とフロー方向を掛け合わせます。このようにして、式の最初の部分は、負の流れ方向の絶対値で結果が得られます。次に、セルがゼロより大きいか、またはゼロに等しい場合の条件を追加し、真偽値(1)、偽値(0)を与え、これを流れの方向の値と掛け合わせます。これにより、負でない流れの方向の値は元の値を維持することになります。

6. 結果を flowdirabs.tif として保存し、OK をクリックします。

通常は、流れの方向の結果を方向性のあるグリッドでスタイルを作成しますが、このチュートリアルでは実施しません。

7. レイヤパネルから元の flowdir レイヤーを削除します。
Flow direction GRASS absolute

次のステップでは、どの累積流量でピクセルをチャネルの一部とみなすことができるかを決めていきます。

4. 河川の累積流量の閾値を定義する

さて、対象地域内のそれぞれのピクセルには累積流量の値、すなわち各セルを通って排水される上流のセルの流量を持っています。
しかしながら、全てのセルが河川チャネルの一部であるわけではありません。そのピクセルを河川の一部とみなせるような累積流量の閾値を決める必要があります。

1. QuickMapServices プラグインをインストールします。メインメニューで プラグイン | プラグインの管理とインストール...と進みます。

2. QuickMapServices プラグインをインストールします。

3. メインメニューで Web | QuickMapServices | OSM | OSM Standardと進みます。

4. OSM Standard上でRur川を探して、下流から上流に向かって地物情報表示ツール でaccumulationレイヤを調べます。
下流では値が2622554まで上がっているのに対し、上流では値がかなり低くなっていることがわかります。
OSM Standardaccumulationレイヤを比較することで、河川の最小累積流量を決定する必要があります。ここでは、50000セルを閾値とします。

5. メインメニューでラスタ | ラスタ計算機...と進みます。

6. 次の式を入力します。

"accumulation@1" > 50000

つまり、累積流量が50000セルよりも大きい場合は、真値(1)を与え、そうでない場合は偽値(0)を与えます。


7. 結果をchannels.tifとして保存します。 OKをクリックします。

8. カテゴリ値パレットレンダラーを使用してchannelsレイヤのスタイルを設定し、値 1 に青を使用し、値 0 を削除して透明にします。

Flow accumulation threshold calibration

通常は、基準となる地図や衛星画像上の河川とベストマッチするようになるまで、異なる閾値でこの作業を繰り返すことになります。

ここでは50000セルの値で続けていきます。


5. 河川を定義する

前セクションでは、河川を決定するための累積流量の閾値を決定しました。ここでは、その閾値を使って、河川を定義していきます。

1. プロセッシングツールボックスで GRASS | ラスタ (r.*) | r.stream.extractと進みます。

2. r.stream.extractダイアログで、標高ラスタDEM_filledを、累積流量ラスタaccumulationを選択します。河川の最低累積流量の値を50000セルに変更します(これは前のセクションで決定した値です)。河川IDのベクタ streams.gpkg に保存します。他の出力は必要ありません。

3. 詳細パラメータの中のv.out.ogr出力タイプlineに変更します。

4. 実行をクリックします。処理が終わったらダイアログを閉じます。ログの赤い警告は無視します。

* 1: これは、ラインベクターに対する GeoPackage 出力フォーマットでのみ動作します。シェープファイルの場合は空のレイヤーになります。
* 2: 累積流量ラスタはオプションです。これを指定しないと、累積流量を再度計算しますが、結果は前のセクションで計算したものとは若干異なります。
r.stream.extractのより詳細な情報についてはマニュアルを参照ください。

5. streamsベクタレイヤのスタイルを設定します。

Delineated streams

これで、河川の決定ができたので、集水域を作りたい河川の流出口を決定することができます。


6. 集水域を求める

次のステップは決定した河川の集水域の流出口を探し、この流出口の集水域を計算していきます。

1. 下流の方で、Rur(オランダ語で Roer)川が Meuse(オランダ語で Maas)川に入るおおよその位置を見つけるために、境界線上の流れをたどってください。この位置を見つけるために、OSM Standardとstreamsベクターレイヤを使用してください。

outlet

2. プロセッシングツールボックスで GRASS | ラスタ (r.*) | r.water.outletと進みます。

3. r.water.outlet ダイアログで入力ラスタとしてflowdirabsを選択します。 出口(outlet)の座標で  をクリックし、定義された河川上の点を選択します。十分な縮尺までズームインしてください。

4. catchment.tifとして流域を保存します。

5. 実行をクリックします。処理が終わったらダイアログを閉じます。

6. レイヤパネルのcatchmentレイヤで右クリックし、レイヤの領域にズームを選択します。

Catchment raster

次に集水域をポリゴンに変換する必要があります。

7. プロセッシングツールボックスでGRASS | ラスタ (r.*) | r.to.vectを選びます。

8. r.to.vect ダイアログで、入力ラスタレイヤとして catchment を選択し、地物のタイプとして area を選択します。それ以外はデフォルトのままにしておきます。ベクタ化された出力をRur_catchment.shpとして保存します。

9. 実行をクリックします。処理が終わったらダイアログを閉じます。

10. レイヤのスタイルを設定します。

Stream and catchment delineated