はじめに
以前書いた記事で、r.watershedの前処理として凹地の平滑化は不要と書いたのですが、平坦地の流路が無駄に蛇行しており、不要とも言い切れないかなと思うようになりました。平坦地の流路をほど良く直線化するために色々試しましたので、補足として書きます。
前処理の有無等による解析結果の比較
Grass r.fill.dir
前処理として、Grassのr.fill.dirを実行した場合の流路を示します。
ベースのグレーは、nodataの孔を埋めたDEMの範囲で、黄色は平坦な場所(grassの別の水文解析の実装のr.terraflowの流向の出力のうち、流向なしの範囲)を示します。
流路は緑が前処理なしでr.watershedを使って流路を作成した結果で、これが基準です。
マゼンダがr.fill.dirの前処理をした結果です。
この結果を見ると、r.fill.dirはしてもしなくても、あまり変わりません。いずれも、平坦地の複雑な蛇行が気になります。
SagaGIS Fill sinks (wang & liu)
sagaは独立したGISで、QGISに同梱されなくなりましたが、プラグインとsaga本体をインストールすることで利用可能です。
前処理として、Fill sinks (wang & liu)を実行した結果を茶色で示します。
流向なしの平坦地の流路が大胆に直線化しています。
Grass r.terraflow
r.terraflowの累積流量の出力から流路を抽出した結果を赤で示します。この解析にはr.watershedを使っていません。
平坦地の流路がほど良く直線化されています。一方で、DEMのnodataの範囲に不規則な流路ができています。
Grass r.terraflow Filled elevation
r.terraflowは、凹地を埋めたラスタ(Filled elevation)も出力しますので、それを前処理として、r.watershedで流路を作成した結果をオレンジで示します。
r.terraflowとは異なりますが、平坦地の流路がほど良く直線化されています。
比較の結論
尾根・谷のはっきりした山地では、凹地の平滑化による流路の出力に違いはありませんが、平坦地では大きな違いがあります。平坦地の流路をDEMから特定するのは、そもそも無理な話なので、複雑に蛇行するよりは、直線的な出力の方が好ましいと思います。
結論として、r.terraflow Filled elevationを前処理するのがベターと思います。
r.terraflow Filled elevationの処理方法
r.terraflowの入力を示します。入力ラスタはnodata値の穴埋めをしたDEMです。SFDは意味があるか分かりませんが、一応チェックしています。出力はFilled(flooded) elevationを使用し、r.watershedの入力とします。
おわりに
r.watershedの平坦地の蛇行が気になって、最初は何とかterraflowを使う方法を考えていましたが、DEMのnodata範囲の流路を削除する方法で行き詰りました(孔なしDEMの範囲でクリップすると、途中の細切れが残るので)。
最終的に、r.terraflow Filled elevationを前処理として使う方法がベターと結論付けましたが、r.terraflowが処理的にr.watershedよりだいぶ重いのが難点です。
最後まで、お読みいただきありがとうございました。