チュートリアル: グラフィカル・モデラーで河川と集水域の定義を自動化する

Site: OpenCourseWare for GIS
Course: QGIS上級者向けチュートリアル
Book: チュートリアル: グラフィカル・モデラーで河川と集水域の定義を自動化する
Printed by: Guest user
Date: Saturday, 20 April 2024, 4:42 AM

1. 概要

QGIS には、プロセスを自動化するための素晴らしい方法がいくつかあります。PyQGIS を使用してスクリプトを構築することができます。しかし、よりグラフィカルな方法をお探しの場合は、プロセッシングツールボックスのツールを使用してプロセスを自動化できるGraphical Modeller が最適です。

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

  • グラフィカルモデルの入力レイヤーと変数の定義
  • グラフィカルモデルにプロセッシングツールを追加
  • グラフィカルモデルの結果を保存
  • グラフィカルモデルをプロセッシングツールボックスに保存
  • 河川を定義するためのグラフィカルモデルを作成
  • 集水域を定義するためのグラフィカルモデルを作成

このチュートリアルでは、SRTMデータをダウンロードして、調査領域のバウンディングボックスポリゴンを作成した任意の領域に適用できる2つのモデルを作成します。このチュートリアルで使うデータを提供されます。

ここではQGIS 3.14 Piを使用していますが、手順は3.10 LTRでも同様です。

2. データの準備

2つのグラフィカルモデルを作成していきます。

  • 河川の定義
  • 集水域の定義
河川定義のモデルは、世界の多くの地域でダウンロードできるSRTM 1-Arc Secondタイルに適用できます。このチュートリアルでは、Rur流域をカバーする4つのタイルが提供されています。

1. QGISを起動します
2. DEMタイルを追加します
Four SRTM tiles

4 つのタイルは、Rurの集水域よりもはるかに広い範囲をカバーしているため、バウンディングボックスもデジタイズする必要があります。ポリゴンをデジタイズするか、対象地域にズームインして、プロセッシングツールボックス範囲の矩形レイヤツールを使用します。プロジェクトのオンザフライ投影が、緯度/経度の座標が度単位の地理座標系ではない投影に変更されていることを確認してください!

このチュートリアルでは、バウンディングボックスを提供しています。

3. バウンディングボックスを地図キャンバスに追加します。

4. レイヤパネルの boundingbox レイヤを右クリックし、レイヤのCRS | レイヤのCRSをプロジェクトのCRSに設定を選択します。 

これにより、プロジェクトCRSをGCS(EPSG:4326)から使用するUTMゾーン32N/WGS-84(EPSG:32632)に変更します。

Set CRS

3. 河川を定義するグラフィカルモデラーを作成する

さて、河川を定義するグラフィカルモデラーを作成していきます。

1. メインメニューで プロセッシング | グラフィカル・モデラーを選択します。

2. モデルデザイナーのウィンドウを最大化します。

3. モデルのプロパティの下に、名称Stream delineationを、グループHydrologyを追加します。

これは、プロセッシングツールボックスでモデルをどのように表示するかをコントロールします。この例では、Hydrologyグループの下にStream delineationモデルが表示されます。

4. さまざまな処理ステップを追加していく前に、 をクリックしてモデルを保存しておきます。モデルはプロファイルに保存されます。名前として streamdelineation.model3 を設定します。

これで、空のモデルに河川の定義のためのさまざまな処理を追加する準備が整いました。


3.1. SRTMタイルのモザイク処理

最初のステップはSRTMタイルのモザイク処理です。

入力として複数のタイルを一度に選択できるようにしたいと考えています。

1. 入力パネルで (複数入力)をダブルクリックします。

2. 複数入力パラメータ定義で、説明DEM Tilesと、許容されるデータ型ラスタと設定し、手動にチェックを入れた状態でOKをクリックします。

こうすることで、ユーザーはモデルを実行する前にラスタレイヤーのセットを選択しなければなりません。

3. タブをクリックして、アルゴリズムパネルに切り替えます。

4. 仮想ラスタの構築を検索し、ツールをダブルクリックします。

5. 仮想ラスタの構築ダイアログでMosaic DEM Tilesと説明のテキストに入力します。

6. 入力レイヤの  をクリックし、DEM TIlesを選択します。をクリックして元の画面に戻ります。

7. Place each input file into a separate bandいいえに変更します。それらのレイヤを重ねたくないからです。ダイアログが以下のようになっているか確認してください。

8. OKをクリックします。

これらのツールでは、出力が最終的な結果である場合にのみ出力名を指定することに注意してください。ここでは、モザイク処理は一時的な結果に過ぎません。

これで画面は次のようになっているはずです。

次の処理を追加していきます。

3.2. DEMの再投影とクリップ

次のステップでは、DEMモザイクをUTMゾーン32N/WGS-84に再投影し、バウンディングボックスでDEMをクリップします。これは一つのツールで行うことができます。

まず、入力ベクターレイヤーとしてバウンディングボックスポリゴンを追加する必要があります。

1. 入力パネルにもう一度切り替えて、ベクタレイヤをダブルクリックします。

2. 説明にBounding boxとタイプし、ジオメトリ型にポリゴンを選択します。手動にチェックを入れたままにしておきます。

こうすることで、ユーザーはバウンディングボックスポリゴンのベクトルレイヤを用意しなければならなくなります。

3. OKをクリックします。

4. ここでアルゴリズムタブに切り替えて、再投影(warp)を検索しダブルクリックします。

5. 再投影(warp)ダイアログで説明にReproject and clip DEMと入力します。

6. 入力レイヤで  ボタンをクリックし、アルゴリズム出力を選択します。

他には一つのアルゴリズムしかないので、Mosaic DEM Tiles処理の出力が自動的に選択されます。

変換元CRSは既知なので空欄のままにしておきます。変換先CRSは提供されているバウンディングボックスレイヤーのものに変更する必要があります。

7. 変換先CRSで ボタンをクリックし、モデル入力を選択します。 

Bounding boxレイヤが自動的に選択されます。

8. 元のピクセル値を可能な限り保存するために、リサンプリング法最近傍(Nearest Neighbour)で使用するようにしてください。出力バンドのNodata値を-9999に設定します。変換先CRSの単位での解像度を30mに設定します。

ダイアログは次のようになっているはずです。

次にバウンディングボックスの範囲でクリップする必要があります。

9. Show advanced parameters ボタンをクリックします。

10. 出力ファイルの矩形範囲モデル入力を選択し、Bounding boxレイヤを選びます。

11. OKをクリックします。

これで画面は次の図のように見えているはずです。

次のステップに進みましょう。


3.3. ボイド値の補完

まれにDEMにはnodata値のピクセルがあることがあります。これらのボイド値は補完される必要があります。

1. アルゴリズムパネルでnodata値を内挿値で埋めるをダブルクリックします。

2. 説明をInterpolate voids in DEMに変更します。入力レイヤReproject and clip DEM アルゴリズムの出力を選択します。内挿値を検索する処理(ピクセル単位)を100ピクセルに増やします。

3. OKをクリックします。

モデルは次の図のようになっているはずです。

Model after interpolation of voids

次のステップに進みましょう。


3.4. シンク(sinks)を埋める

次に追加する処理は、水の流れを阻害する窪地を取り除くために、DEM内のシンクを埋めることです。

1. アルゴリズムパネルでSAGA Fill sinks (Wang & Liu) アルゴリズムを探しダブルクリックします。

2. Fill sinks (wang & liu) ダイアログで前のステップでのアルゴリズムの出力をDEMグリッドに選択します。埋め立てたDEMは必要なので埋め立て済みDEMFilled DEMとタイプして保存されるようにします。 

3. OKをクリックします。

これでモデルは下の図のようになりました。出力レイヤー(Filled DEM)が緑色のボックスに入っていることに注意してください。最後のアルゴリズムの下のボックスを移動させることができます。

Filled DEM model

これで次のステップの実施に進むことができます。



3.5. 河川を定義する

ここで、河川を定義してみましょう。そのためには、前のステップで得られたDEMとキャリブレーション可能なストラー数の閾値が必要です。これを整数の入力としてモデルに追加します。

1. 入力タブをクリックし、入力パネルに戻ります。

2. 数値をダブルクリックします。

3. 数値パラメータ定義で、説明Strahler order thresholdと入力します。数値型Integerです。ストラー値は常時最小値を1にします。最大値は面積に依存しますが、20に制限することができます。デフォルト値として8を定義することができます。 手動にチェックを入れたままにしておきます。

4. OKをクリックします。

5. アルゴリズムタブに戻って、SAGAのChannel network and drainage basinsアルゴリズムをダブルクリックします。

6. Channel network and drainage basinsダイアログで説明Delineate streamsに変更します。標高グリッドFilled DEMアルゴリズムの出力にします。閾値Strahler order thresholdの入力値を選択します。流路(Channels)Streamsとし保存します。

7. OKをクリックします。

ボックスを少しアレンジ直すことができます。モデルは次の図のようになっているかと思います。

Stream delineated model


3.6. 流出口を定義された河川にスナップする

次のステップは地図上でデジタイズされた流出口を前回のステップで定義した河川にスナップさせます。

1. 入力パネルでベクタレイヤをダブルクリックします。

2. ベクタレイヤパラメータ定義説明Outlet on mapとタイプし、ジオメトリ型ポイントにします。手動にはチェックを入れたままにしておきます。

3. OKをクリックします。

スナップの許容範囲の入力をもう一つ追加します。

4. 入力パネルで数値をダブルクリックします。

5. 数値パラメータ定義ダイアログで説明Toleranceとタイプし、数値型浮動小数点数(Float)を選択し、最小値に30、最大値に500、デフォルトに100メートルを設定します。手動にはチェックを入れたままにしておきます。

6. OKをクリックします。

7. アルゴリズムパネルにいってジオメトリをレイヤにスナップアルゴリズムをダブルクリックします。

8. ジオメトリをレイヤにスナップダイアログで、説明Snap outlet to delineated streamに変更し、入力レイヤにはOutlet on mapを、スナップで参照するレイヤには前のステップで出力された河川を、許容範囲にはToleranceの入力値を選択します。動作ルールを「最近傍点を優先し、必要に応じて頂点を追加する」に変更します。

9. OKをクリックします。

ここで、後に集水域の定義で使用することになる座標を属性テーブルに追加する必要があります。

10. アルゴリズムパネルで、ジオメトリ属性の追加アルゴリズムをダブルクリックします。

11. ジオメトリ属性の追加ダイアログで説明Save outlet with coordinatesとタイプします。入力レイヤスナップされたジオメトリの出力を選択し、レイヤをSnapped outletとして保存します。

12. OKをクリックします。

モデルは次の図のように見えているかと思います。

Model stream delineation complete

13.  をクリックしてモデルを保存します。

14. グラフィカルモデラーウィンドウを閉じます。


3.7. 河川定義モデルを実行する

これでプロセッシングツールボックスに新しいモデルが見えるようになりました。

モデルを実行する前に、まずは流出口をデジタイズする必要があります。

1. QuickMapServicesプラグインをインストールし、OSM Standardを地図キャンバスに追加します。

2. 地図上でMeuse(Maas)川に流れ込むRur(オランダ語でRoer)川の河口を探します。

3.  をクリックして新しい一時スクラッチレイヤを作成します。

4.ダイアログでポイントジオメトリタイプoutletというレイヤ名にします。座標系はEPSG: 32632にします。

5. フィールドを定義する必要はありません。OKをクリックします。

6. レイヤは自動的に編集モードに設定されます。  をクリックして流出口にポイントの地物を追加します。

7.   をクリックして編集モードをオフにし、保存をクリックします。

これでプロセッシングツールボックスのStream delineationモデルが使えるようになりました。

8.プロセッシングツールボックスで モデル | Hydrology | Stream delineationをクリックします。

9. Stream Delineationダイアログで Bounding boxとしてboundingboxレイヤを、DEM TIlesとして4つのSRTMタイルを選択し、Outlet on mapとしてOutletを選択します。Strahler order thresholdはデフォルトのままで、スナップさせるToleranceを500mにします。snapped_outlet.shpとしてSnapped outletを保存し、streams.shpとしてStreamsを、filled_DEM.sdatとしてFilled DEMを保存します。

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

結果は下の図のようになるかと思います。

ここで、2つ目のグラフィカルモデルを使用して、Rurの集水域を定義することができるようになりました。

4. 集水域を定義するグラフィカルモデルを作成する

これで、スナップされた流出口と埋め立て済みのDEMができましたので、これらのレイヤーを2つ目のグラフィカル・モデルの入力項目として使用して、Rurの集水域を定義することができます。

1. メインメニューで プロセッシング | グラフィカル・モデラー...と進みます。

2. モデルのプロパティ名称Catchment delineationを、グループHydrologyを入力します。

3. catchmentdelineation.model3という名前でモデルを保存します。


4.1. 入力項目を定義する

まずモデルの入力項目を定義する必要があります。

1. 入力パネルでラスタレイヤをダブルクリックします。

2. ラスタレイヤパラメータ定義ダイアログで説明Filled DEMと入力し、手動にはチェックを入れたままにしておきます。

3. OKをクリックします。

4. 入力パネルで数値をダブルクリックします。

5. 数値パラメータ定義ダイアログで説明X Coordinate Outletと入力し、数値型浮動小数点数(Float)にします。他の設定はデフォルトのままにしておきます。

6. OKをクリックします。

7. Y座標についても同様に作成します。

これで入力項目が定義されたので、これらをアルゴリズムで使うことができるようになりました。

4.2. 集水域のラスタを作成する

これで集水域を導き出すアルゴリズムを追加できます。

1. アルゴリズムパネルからSAGA Upslope areaアルゴリズムを追加します。

2. Upslope area ダイアログで、説明Delineate catchmentに変更します。対象X座標X Coordinate Outletに、対象Y座標をY Coordinate outletにリンクします。Filled DEMの入力を標高グリッド(Elevation)に使用します。方法をD8に設定し、他の設定はデフォルトのままにしておきます。 

3. OKをクリックします。

次のステップでこの集水域ラスタレイヤをポリゴン化していきます。


4.3. 集水域の境界のポリゴン化をする

次に集水域のラスタレイヤをポリゴンにする必要があります。

1. アルゴリズムパネルでラスタのベクタ化(polygonize)を選びます。

2. ダイアログで説明Polygonize catchmentに変更します。入力レイヤUpslope areaを選択し、残りはデフォルトのままにします。

3. OKをクリックします。

ここで、値100の属性を持つ集水域を選択して保存する必要があります。

4. アルゴリズムパネルで属性による抽出を選択します。

5. 属性による抽出ダイアログで説明Save catchment polygon onlyに変更します。入力レイヤとして一つ前のアルゴリズムの出力を選びます。属性選択DN(0から100の間の値を持つフィールドです)とタイプし、演算子=のままにし、に100を入力します。そうすることで集水域の境界であるDB = 100の地物を選択できます。抽出されたポリゴンをCatchment Boundaryとして保存します。

6. OKをクリックします。

モデルは次の図のようになっているかと思います。

Catchment delineation model

7.   ボタンをクリックしてモデルを保存し、グラフィカルモデラーウィンドウを閉じます。

次に、モデルを実行してみましょう。


4.4. 集水域定義のモデルを実行する

これで集水域定義のモデルを実行する準備が整いました。

1. Snapped outletレイヤの属性テーブルを開いて、後に座標をコピーできるようにしておきます。 

2. プロセッシングツールボックスで モデル | Hydrology | Catchment delineationを選択します。

3. Catchment Delineation ダイアログでFilled DEMfilled_DEMレイヤを選択します。snapped_outletレイヤの属性テーブルから流出口のXとY座標をコピーします。 Catchment BoundaryRur_catchment.shpとして保存します。

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

結果は下の図のようになるはずです。