チュートリアル: グラフィカル・モデラーで河川と集水域の定義を自動化する
Site: | OpenCourseWare for GIS |
Course: | QGIS上級者向けチュートリアル |
Book: | チュートリアル: グラフィカル・モデラーで河川と集水域の定義を自動化する |
Printed by: | Guest user |
Date: | Thursday, 21 November 2024, 6:44 PM |
1. 概要
QGIS には、プロセスを自動化するための素晴らしい方法がいくつかあります。PyQGIS を使用してスクリプトを構築することができます。しかし、よりグラフィカルな方法をお探しの場合は、プロセッシングツールボックスのツールを使用してプロセスを自動化できるGraphical Modeller が最適です。
このチュートリアル後には次のようなことができるようになります。
- グラフィカルモデルの入力レイヤーと変数の定義
- グラフィカルモデルにプロセッシングツールを追加
- グラフィカルモデルの結果を保存
- グラフィカルモデルをプロセッシングツールボックスに保存
- 河川を定義するためのグラフィカルモデルを作成
- 集水域を定義するためのグラフィカルモデルを作成
2. データの準備
2つのグラフィカルモデルを作成していきます。
- 河川の定義
- 集水域の定義
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をクリックします。
モデルは次の図のようになっているはずです。
次のステップに進みましょう。
3.4. シンク(sinks)を埋める
次に追加する処理は、水の流れを阻害する窪地を取り除くために、DEM内のシンクを埋めることです。
1. アルゴリズムパネルでSAGA Fill sinks (Wang & Liu) アルゴリズムを探しダブルクリックします。
2. Fill sinks (wang & liu) ダイアログで前のステップでのアルゴリズムの出力をDEMグリッドに選択します。埋め立てたDEMは必要なので埋め立て済みDEMにFilled DEMとタイプして保存されるようにします。
3. OKをクリックします。
これでモデルは下の図のようになりました。出力レイヤー(Filled DEM)が緑色のボックスに入っていることに注意してください。最後のアルゴリズムの下のボックスを移動させることができます。
これで次のステップの実施に進むことができます。
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をクリックします。
ボックスを少しアレンジ直すことができます。モデルは次の図のようになっているかと思います。
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をクリックします。
モデルは次の図のように見えているかと思います。
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. 実行をクリックします。処理が終わったらダイアログを閉じます。
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をクリックします。
モデルは次の図のようになっているかと思います。
7. ボタンをクリックしてモデルを保存し、グラフィカルモデラーウィンドウを閉じます。
次に、モデルを実行してみましょう。
4.4. 集水域定義のモデルを実行する
これで集水域定義のモデルを実行する準備が整いました。
1. Snapped outletレイヤの属性テーブルを開いて、後に座標をコピーできるようにしておきます。
2. プロセッシングツールボックスで モデル | Hydrology | Catchment delineationを選択します。
3. Catchment Delineation ダイアログでFilled DEMにfilled_DEMレイヤを選択します。snapped_outletレイヤの属性テーブルから流出口のXとY座標をコピーします。 Catchment BoundaryをRur_catchment.shpとして保存します。
4. 実行をクリックします。処理が終わったらダイアログを閉じます。
結果は下の図のようになるはずです。