河川の総水量を求めたり、水量/流量で流下時間を概算したりするなど、流況計算結果から区間水量を求めたいことがあります。ここではiRIC/River2Dという流況計算ソフトから区間水量を求める方法をまとめます。iRIC/River2Dに限らず、「X, Y, 水深」という形でcsvファイルを出力できるソフトに対応できます。
QGISはフリーでオープンソースの地理情報システムです。
iRICから計算結果をエクスポート
iRICのプロジェクトで「ファイル」-「エクスポート」ー「計算結果」を選び、csvファイルで最終的な計算結果だけを出力します。(実は「形式」としてESRIシェープファイルも選べますが、私の場合、iRICが飛んでしまいました。)出力が終わればiRICは閉じてもかまいません。ちなみに、River2Dは有限要素法で計算しているので、計算ノードが整列していない非構造格子です。ですので、単にDepthを平均するだけでは実際の平均水深にはならないためにGISでの処理が必要になります。ノードが整列した構造格子でも、河川の曲がりに対応するなどしていると、計算ノードに粗密が生じるのでやはりGISでの処理が必要です。
CSVから不要なデータを削除する
出力されたCSVをExcelで開いてみると、下図左のように不要なデータが含まれていますので、下図右のようにX, Y, Depthを残して後は削除します。
QGISにCSVをポイントとして読み込む
QGISを開き、「レイヤ」ー「レイヤを追加」-「CSVテキストレイヤを追加・・・」を選びます。「データソースマネージャ|CSVテキスト」ダイアログが開きますので、ファイル名、レイヤ名、ファイル形式、X属性、Y属性、ジオメトリのCRSを設定します。
読み込まれたら、念のために属性テーブルを開いて、すべてのカラムが実数になっていることを確認します。もし整数になっているカラムがあれば、CSVファイルをエディタで開いて、最初のデータだけで良いので小数点とゼロをつけ、再度読み込めば良いと思います。
CSVレイヤをポイントシェープファイルにエクスポートする
CSVを直接読み込んだレイヤではこの後の解析ができないようですので、エクスポートしてポイントシェープファイルにしておきます。この作業でポイントシェープファイルがレイヤパネルに登録されるので、CSVを読み込んだレイヤは削除してしまってもかまいません。
ポイントをDepthをZ値としたラスタに変換する
プロセシングツールボックスから「GDAL」-「グリッド(線形)」を選びます。グリッドには他にも多くの補間法が選べますが、今回は流況計算の補間法と同じ「線形」にしました。「入力レイヤ(点)」にはポイントシェープファイル、「検索距離」は補間するための三角要素を探索する距離ですが、-1.0は無限遠です。水路が細かく分岐している場合などでは、隣の水路がつながってしまったりする恐れがあるので、ポイント間距離の最大値ぐらいを入れておいた方が良いかもしれません。「nodata値」はデフォルトはゼロで、下図では-9999999.0を入れていますがゼロのままでもかまいません。「内挿するZ値の属性」にはDepthを指定します。あとは出力ファイル名を決めて「実行」します。
すると、DEMが生成されます。
このプロセスではラスタのセルサイズを決めるところがありませんでしたので、念のためにラスタのセルとポイントの関係を拡大して確認しましたが、丁度よいセルサイズが自動的に選ばれているようです。
マスクを作成する
この作業は不要な場合もあると思いますが、今回は流下時間を概算するために水が流れている部分だけの水量を求めたいので、死水部分と下流端を除いたマスクを作ります。まずポリゴンシェープファイルを作成します。
編集モードに入り、不要な部分を除外するようにポリゴンを作っていきます。ラスタでも河川外は水深ゼロなので含まれていても実害はありませんし、概算なのでサッとやってしまいます。ポリゴンができたら、編集ツールバーの「レイヤ編集内容の保存」しておくことを忘れないでくださいね。忘れると次のステップでエラーが出ます。
マスクレイヤでラスタを切り抜く
「ラスタ」ー「抽出」ー「マスクレイヤによる切り抜き」で、注目範囲を切り抜きます。
結果は下図のようになりました。
水量を計算する
プロセシングツールボックスから「ラスタのサーフェス体積」を起動します。「基準値」はゼロ、「方法」は「基準値を超える場合だけ」です。出力オプションは2つありますが、どちらも同じ内容が出力されるので一方だけで十分です。
実行すると以下が得られます。
以上です。工数は多めですが、時間がかかる部分はありませんので簡単にできると思います。Have fun!
コメント