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