チュートリアル: 河川の到達時間を計算する (Kirpich方程式)

Site: OpenCourseWare for GIS
Course: QGIS上級者向けチュートリアル
Book: チュートリアル: 河川の到達時間を計算する (Kirpich方程式)
Printed by: Guest user
Date: Saturday, 27 April 2024, 7:50 AM

1. 概要

このチュートリアルでは河川の到達時間を計算していきます。Kirpich方程式を使用しますが、同様の方法で他の方程式にこのやり方を適用することもできます。

Kirpich方程式:

tc = k * (dx ** const1) * (S ** const2)

変数について:

tc = 集中時間(分)
k =  0.0195(SI単位に変換)
dx = 最初と最後のノード間の距離(メートル単位)
S = m / m単位の最初と最後のノード間の標高差
const1 = 0.77
const2 = -0.385


このチュートリアルを通して以下のことができるようになります:

  1. 河川の最長のパスを選択する 
  2. 線分を一つにまとめる(Dissolve) 
  3. 河川の最初と最後のノードを見つける 
  4. 最初と最後のノードを一つのポイントベクターレイヤーとしてマージする 
  5. これらのポイントに対してDEMから標高を付与する 
  6. 手作業またはPyQGISスクリプトを使用してKirpich方程式を計算する

2. 河川の最長のパスを選択する

この最初のステップでは到達時間を計算したい河川の最長のパスを選択します。残念なことにそれを選択する簡単なツールはありませんので、手動で行っていきます。

1. QGISを起動します

2. このチュートリアルで使用するGeoPackageからKirpichプロジェクトを開きます。メインメニューのプロジェクト | 開く | GeoPackage... を選択します。


3. GeoPackageからプロジェクトを読み込むダイアログで、Kirpich_data.gpkg を参照し、Kirpich をプロジェクトとして選択します。

プロジェクトは集水式ポリゴン(catchpoly)、 channels、 DEM (SRTM 1-Arc Second)を含んでおり、陰影起伏図とのブレンディングを用いてスタイリングされています。

4. channelsをクリックします

5. 地物を選択 アイコン をクリックします

6. ここで上流から下流まで河川の最長となる線分を選択していきます。<shift>ボタンを押しながら線分を追加します。必要であればズームインしてください。マウスのスクロールボタンでズームイン・アウトしたり、スペースキーと組み合わせてマウスでパンすることができます。もし間違えて別の線分を選択してしまった場合はもう一度クリックすれば選択を解除できます。

Select longest path of channel

最長のパスを選択した後は上の画像のように黄色になるはずです。

この最長パスを新しいレイヤーとして出力します。

7. レイヤーパネルのchannels上で右クリックし、エクスポート | 選択地物の保存... を選択します。

8. ダイアログでこれを Kirpich_data のGeoPackageにriverというレイヤ名でOKをクリックして保存します。

9. channelsからriverにスタイルをコピーします: channels 上で右クリックし、 スタイル | スタイルをコピー | 全スタイルカテゴリ... を選択し、and click right on Kirpich_data river 上で右クリックし、 スタイル | スタイルの貼り付け | 全スタイルカテゴリ を選択します。

10. channels レイヤを削除します。

これで河川の最長パスだけが表示されました。

Longest path of the channel

次のステップでは最長パスのそれぞれの線分を一つにまとめて(dissolve)いきます。

3. 河川の線分を一つの地物にまとめる(Dissolve)

今の河川レイヤーはそれぞれが始点と終点のノードを持つ複数の線分から構成されているため、まずそのレイヤーをまとめる(dissolve)する必要があります。そうすることで一つの地物とすることができます。

1. メインメニューで ベクタ | 空間演算ツール | 融合(Dissolve)... を選択します。

2. 融合(Dissolve)ダイアログでKirpich_data riverレイヤを入力レイヤとして選択します。基準となる属性は選択せずに、そのレイヤをKirpich_data GeoPackageに river_dissolvedという名前で保存するようにし、実行をクリックします。

Dissolve dialogue

3. プロセッシング後にClose をクリックします。

4. Kirpich_data riverレイヤからスタイルをコピーし、そのレイヤを削除します。

5. 属性テーブルを確認します。

Dissolved river

次のセクションでは河川の始点と終点のノードを見つけていきます。


4. 河川の始点と終点のノードを見つける

このステップでは河川の始点と終点のノードを見つけていきます。後に行うKirpich方程式でこれらのポイント間の距離と標高差が必要となります。

1. プロセッシングツールボックスを開きます: メインメニューのプロセッシング | ツールボックスを開きます。

2. ツール上で ベクタジオメトリ | 特定の点の抽出を選択します。


このツールを使用して、特定の頂点を抽出できます。最初の頂点はインデックス0に対応し、2番目の頂点のインデックスは1などです。負のインデックスを使用して、ジオメトリの最後にある頂点を見つけることができます。 -1は最後の頂点に対応し、-2は最後から2番目の頂点に対応します。

3. 特定の点の抽出ダイアログでriver_dissolvedを入力レイヤとして選択し、頂点インデックス0, -1として、Kirpich_data GeoPackageにfirstlastnodeという名前で保存します。実行をクリックします。


4. プロセッシング後Closeをクリックします。

5. firstlastnodeレイヤで右クリックし属性テーブルを開くを選択します。
Attributes of first and last node

vertex_posというフィールドで頂点のインデックスを確認でき、distanceというフィールドで最初のノードからの距離をメートル単位で確認できます。 したがって、ここでの最後のノードまでの距離は3745mとなります。 方程式にはその値が必要となります。
また始点と終点のノード間の標高差も必要となります。次のステップで二つのノードに対して標高をサンプリングしていきます。

5. 始点と終点のノードに標高を付与する

Kirpich方程式では河川の始点と終点のノード間の標高差も必要となります。
このセクションではDEMから標高をノードにサンプリングしていきます。

1.  プロセッシングツールボックスラスタ解析 | ベクタレイヤにラスタ値を付与 を選択します。

2.ベクタレイヤにラスタ値を付与ダイアログで、firstlastnode入力レイヤとして選択肢、DEM参照するラスタレイヤとして選択します。Advanced Parametersセクションを開き、ラスタ値を収納するカラム名の接頭辞Zにします。サンプリングしたポイントKirpich_Data GeoPackageにfirstlastzというレイヤ名で保存します。実行をクリックします。
Sample raster values dialogue

3. プロセッシング後Closeをクリックします。

4. firstlastzレイヤを右クリックし属性テーブルを開くを選択します。


これで始点と終点のノードの距離と標高がわかるようになりました。

これで、Kirpich方程式を入力できます。 次のセクションでは、計算を実行可能なPyQGISスクリプトを開発します。

6. PyQGISで河川の到達時間を計算する

属性テーブルのフィールド計算機を使用してKirpich方程式を計算する簡単な方法がないため、このセクションでは、Kirpich方程式を実行するためのPyQGISスクリプトを開発します。

Kirpich方程式:

tc = k * (dx ** const1) * (S ** const2)

変数について:

tc = 到達時間(分)
k = 0.0195(SI単位に変換)
dx = 最初と最後のノード間の距離(メートル単位)
S = m / m単位の最初と最後のノード間の標高差
const1 = 0.77
const2 = -0.385

1.メインメニューのプラグイン | Pythonコンソールにいきます。

これでPythonコンソールが画面の下側に表示されました。

2. エディタの表示アイコンをクリックします。

コードを書くことができるエディタを開きます。PyQGISを学べる無料のチュートリアルをこちらで見ることができます。

3. 下のスクリーンショットのようにコードを書きます。#から始まる行はコメントになります。またはGitHubからスクリプトをダウンロードすることができます。

4. ボタンをクリックし、スクリプトをKirpich.pyとして保存します。

5.  をクリックしスクリプトを実行します。

Pythonコンソールで結果を見ることができます:

到達時間は21.8分となりました。