実際の調査研究では、DEM領域内のすべての流域界を求めるより、特定の流路の特定の位置から上流について知りたいことの方が多いと思います。できるだけ簡単にこの目的を達する方法を教えます。

QGISでの流域界の検出は、これまでSAGAツールを使用することが多かったけど、QGIS3.30以降SAGAツールがデフォルトでは使えなくなったんだ。ここでは、GRASSツールを使う方法を解説するよ。SAGA GIS自体はQGISと一緒にインストールされているので、SAGA GISで流域界を作成することは今でもできるよ。
QGISはフリーでオープンソースの地理情報システムです。
流向ラスタと流路が正確にわかるデータを用意する
前記事「DEMの領域内のすべての流域界と流路を検出する」を理解し、実行した状態を本解説の出発点にします。流向ラスタは、前記で作成したflowdir.tifです。流路が正確にわかるデータはいくつかありますが、ここではsegment.tifを使いましょう。

「流路が正確にわかる」とは、「流向ラスタと矛盾がない流路がわかる」という意味よ。現実の河川は河川改修などで流路がDEMの地形に従っているとは限らないの。だから、別の地図の河川の位置を信用してはダメ。流向ラスタを作成したときに生成された流路データを使う必要があるのよ。
下図は、前記事で作成した与論島の流向ラスタ(flowdir)と流路ラスタ(segment)です。

ちなみに、下図は流路ラスタをOpenStreetMapに重ねたものです。地図に記載された河川とDEMから検出された流路が大きく離れていることがわかりますね。河口近くや平野などの平坦な地形では特によく発生します。対策は難しいですが、対策事例を別に紹介していますので興味があればご覧ください。

求めたい流域の下流点の座標を指定して流域を検出する
流域を検出するにはGRASSのr.water.outletツールを使用します。まず、下図のように流域を求めたい下流点周辺を、1つ1つのセルが判別できるスケールまで拡大します。次に、r.water.outletツールを起動し、①「排水方向ラスター」にflowdirを設定し、「流域の出力」に出力ファイル名を設定します。次に、②「・・・」をクリックするとr.water.outletのダイアログが消え、マップビューに③の十字カーソルが現れるので、流域下流点に設定したいセルの内部でクリックします。すると、r.water.outletのダイアログが再び現れ、「出口の座標」が設定されています。


流量が正確にわかるデータとしてsegmentラスタを用いたのは、流路セルのできるだけ中央の座標が知りたいからなんだ。前記事でlineベクタ化したstreamsシェープファイルでも流路の位置はわかるけど、セルの大きさまではわからないからね。
実行ボタンを押すと下図のように流域ラスタが作成されます。下図では生成されたラスタを半透明にしてあります。

流域界ラスタをベクタ化する
前項で流域界は検出されましたが、ベクタ化して使い勝手を良くしておきましょう。QGISのメニューバーから「ラスタ」ー「変換」ー「ラスタをベクタ化(polygonize)」を使います。「入力レイヤ」にはupstreamBasinラスタレイヤを、出力ファイルとして「ベクタ化」枠にファイル名(ここではupstreamBasin.shp)を設定します。

下図は生成されたupstreamBasin.shpです。塗りつぶし色を透明に、ストローク色(ポリゴン外周)を赤に設定してOpenStreetMapとstreamsベクタに重ねて表示してみました。

とっても簡単ですね! 本稿は以上です。Have fun!

コメント