チュートリアル: 複数のサブ流域を定義する

Site: OpenCourseWare for GIS
Course: QGIS上級者向けチュートリアル
Book: チュートリアル: 複数のサブ流域を定義する
Printed by: Guest user
Date: Tuesday, 23 April 2024, 4:45 PM

1. 概要

別のチュートリアルでは、特定の流出口の集水域を定義する方法を学びました。しかし、時には、複数の流出口や集水域内のすべてのサブ集水域に対してこれを行いたい場合もあると思います。

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

  • デジタル化された注水ポイントを川の境界線にスナップする。
  • スナップされた注水点の集水域を定義する
  • 集水域内のすべてのサブ集水域の注水ポイントを作成する。
  • 集水域内のすべてのサブ集水域を定義する
このチュートリアルで提供されるデータには、予めフィルされたDEM、集水域境界レイヤー、および水文学を含むGeoPackageが含まれています。

このチュートリアルは QGIS 3.10 LTR バージョンでのみ動作し、3.14 では(まだ)動作しないことに注意してください。

2. 注水ポイントをデジタル化

まず、注水ポイント(それらの点が影響を与えるエリア、つまり集水域を定義したポイント)をデジタル化します。

1. QGISを起動します。

2. メインメニューの プロジェクト | 開く | GeoPackage... と進みます。

3. GeoPackage からプロジェクトを読み込むダイアログで、data_multiple_subcatchments.gpkg GeoPackage を参照し、Multiple_Subcatchments プロジェクトを選択し、OK をクリックします。

このプロジェクトでは、Rur流域の境界、水文、フィルされたDEMが表示されています(DEMのフィルについては、河川と流域の境界線のチュートリアルで説明されていますが、このチュートリアルのステップに従う前に、自分のデータに適用する必要があります)。

ここでは、いくつかの流出口をデジタル化するための背景地図を追加します。 OpenStreetMapを使います。

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

5. QuickMapServices プラグインをインストールし、画面を閉じます。 

6. メインメニューの Web | QuickMapServices | OSM Standard に進みます。

7. レイヤパネルのレイヤ名の前にあるチェックボックスのチェックを外して、DEMHillshadeを非表示にします。

Rur with OSM

8. 2つの支流が合流する集水域内の場所に拡大します。

9. ツールバーで  をクリックして一時スクラッチレイヤを作成します。

10. 新しい一時スクラッチレイヤダイアログでPour pointレイヤ名として、ポイントジオメトリタイプとして、プロジェクトの座標系(EPSG:32632)を選択します。残りはデフォルトのままにしておきます。

11. OK をクリックして空のポイントベクターレイヤーを作成します。

この一時的なスクラッチレイヤーを作成するのは、これが中間的なステップであり、そのレイヤーを維持する必要がないからです。

次に、川の中で支流が合流する地点をデジタル化します。

12. Pour pointレイヤーの編集がオンになっていることを確認し、  をクリックしてポイントフィーチャを追加します。

13. 支流が合流する地図上の川のポイントにフィーチャを配置します。

14. これを、サブ集水域を作成したい他のいくつかのポイントに対して繰り返します。

15.  をクリックし編集をオフにして保存をクリックします。

次のセクションでは、デジタル化された注水ポイントを水路(hydrography)にスナップします。

3. 注水ポイントをスナップする

注水点が水路(hydrography)レイヤ上にある場合にのみ、(サブ)集水域を定義することができます。そうでなければ、このモデルには川がありません。水路(hydrography)レイヤに注水ポイントをスナップすることでそれを実現できます。

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

2. プロセッシングツールボックスで、ベクタジオメトリ | ジオメトリをレイヤにスナップを選択します。

3. ジオメトリをレイヤにスナップダイアログで、入力レイヤとしてPour pointを選択し、参照レイヤとしてRur hydrographyを選択します。許容範囲を100 mに変更します。これは、点を線にスナップするために検索する半径です。動作ルールを「最近傍点を優先し、必要に応じて頂点を追加する」に変更します。結果に問題がなければ、この設定で実行してみてください。スナップされるジオメトリをプロジェクトの GeoPackage にレイヤ名 Snapped pour points で保存します。

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

5. 結果を確認します。

これで、注水ポイントをスナップしたので、次のセクションでは、その集水域の定義をできるようになりました。


4. 注水ポイントの複数のサブ集水域を定義する

これで、スナップされた注水ポイントの集水域を計算する準備が整いました。公式リポジトリにはないプラグインを使います。

1. メインメニューの設定 | ユーザープロファイル | アクティブなプロファイルフォルダを開くと進みます。
2. python\pluginsのサブフォルダを参照します。例えば、次のようなパスになります。 C:\Users\hansa\AppData\Roaming\QGIS\QGIS3\profiles\subcatchments\python\plugins

3. ここで次のGitHubリポジトリを開きます: https://github.com/jvdkwast/PyQGIS_Hydro
4. 緑色のCodeボタンをクリックし、 Download ZIPを選びます。
5. ウンロードしたzipファイルを開きます。 7Zip は素晴らしいオープンソースツールです。zipファイルを参照して、points_to_catchmentsサブフォルダをステップ2で特定したpluginsフォルダに展開します。

6. QGISでメインメニューからプラグイン | プラグインの管理とインストール...を選びます

7. 設定タブにいってリポジトリを再読み込みをクリックします。

8. 全プラグインタブに戻り、Points to Catchmentsプラグインの前のチェックボックスにチェックを入れ、ダイアログを閉じます。
Points to Catchments Plugin

ツールは、Processing Toolbox に追加されました(QGIS 3.14 では機能しないことに注意)。

9. プロセッシングツールボックスで IHE Delft | Hydrology | Calculate catchments from pointsと進みます。

10. Calculate Catchments From Pointsダイアログでは、Snapped Pour PointsレイヤをOutflow point layerとして選択します。DEM layerとしてFilled DEMを選択します。ツールが各ポイントを保存するシェイプファイルを新しいOutput Folderに設定します。


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

12. ブラウザパネルに移動し、マップキャンバスにシェイプファイルをドラッグして、スタイルを設定して視覚化します。

subcatchmentssubcatchments

次のセクションでは、集水域内のすべてのサブ集水域についてこれを行います。

5. 集水域内のすべてのサブ集水域を定義する

同様の方法で、Rur集水域のすべてのサブ集水域を定義することができます。しかし、それでは、注水ポイントをデジタル化したり、スナップしたりするための手作業が多くなってしまいます。

このセクションでは、河川の分岐点を導出し、すべての分岐点にPoints to catchmentsツールを適用します。

1. プロセッシングツールボックスで SAGA | Terrain Analysis - Channels | Channel network and drainage basinsと進みます。

2. ダイアログでFilled DEM標高グリッドとして選択し、閾値8に設定してください(これは、河川と集水域の境界線の設定でキャリブレーションされます)。合流分岐部以外のすべての出力のチェックを外して、プロジェクトフォルダにjunctions.shpという名前で保存します。

3. 実行をクリックし、処理が完了したらダイアログを閉じます。

junctionsレイヤはRurの集水域よりも広い範囲をカバーしているので、まずそれをクリップする必要があります。

4. メインメニューで ベクター | 空間演算ツール | 切り抜き(Clip)...と進みます。

5. 切り抜き(clip)ダイアログで、入力レイヤとしてjunctionsレイヤーを選択し、オーバーレイレイヤとして Rur catchment boundaryを選択します。クリップしたレイヤーをRur junctions という名前でこのプロジェクトの GeoPackage に保存します。

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

7. レイヤーパネルからjunctionsレイヤーを削除します。

8. レイヤーパネルのRur junctionsレイヤーを右クリックして、属性テーブルを開くを選択します。

属性テーブルでは、Typeフィールドをみるとジャンクションがスプリング分岐点かを示していることがわかります。ここで必要なのは分岐点だけです。これらはサブキャッチメントの流出口なので。ここではスプリングを取り除きます。

9.属性テーブル上で をクリックして編集をオンにします。

10. 式による地物選択 ボタンを使用して地物を選択します。

11. QGIS式による選択ダイアログで次のような式を入力します。

 "TYPE"  =  'Spring'

12. 地物を選択をクリックしダイアログを閉じます。

13. ここで選択地物の削除ボタン をクリックします。

14.   ボタンで編集モードをオフにして保存をクリックします。属性テーブルを閉じます。 

このポイントレイヤーは、MultipointZMジオメトリを持っていますが、これは使用できません。通常のポイントジオメトリを持つレイヤーに変換する必要があります。

15. メインメニューで ベクター | ジオメトリツール | マルチパートをシングルパートに変換...と進みます。

16.マルチパートをシングルパートに変換ダイアログで、入力レイヤーとしてRur junctionsを選択し、シングルパートレイヤーをこのプロジェクトのGeoPackageにoutletsという名前で保存します。

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

18. レイヤパネルから Rur junctions を削除します。

これで、Points to catchmentsツールをすべての分岐点に適用して、その集水域を定義することができるようになりました。

19. プロセッシングツールボックスで IHE Delft | Hydrology | Calculate catchments from pointsを選択します。

20. ダイアログでRur junctionsOutflow point layerとして、Filled DEMDEM layerとして選択します。

21. 全てのサブ集水域を保存する新しい出力フォルダを選択します。

22. 実行をクリックします。この処理は少し時間がかかります。全てのポイントが処理されたら閉じるをクリックします。

23. ブラウザパネルに移動し、25個のシェープファイルを地図キャンパスにドラッグします。

24. プロセッシングツールボックスレイヤをGeopackage化ツールを使ってレイヤをプロジェクトのGeopackageに追加してプロジェクトを保存します。

25 subcatchments