Catchment Area Calculator with Python & GIS of Japan

* Now on writting !!!

27th Oct. 2024

 PythonとGeographic Information SytstemのReskillngのため、国土地理院(Geospacial Information Authority of Japan)がWeb上でPublicationしているDEM(Digital Elevation Map)のDateを利用して、Optional Point(Longitude Latitude)のCathment Area(集水面積)をCalcurate CodeをCreateしてみました。

 準備作業として、必要な範囲のDEM Dataを国土地理院のHPからDEMDataをDownloadして、結合しておく必要がありますが、これについては、今回は省略します(機会があれば、別途、紹介します。)

 まずは、計算結果の一例からご紹介です。現在国土交通省が四国愛媛県内で建設を進めている山烏坂ダムの地点の集水面積を計算した結果です。青色のドットが最初の概算結果、ピンク色のドットが概算結果を精査するコードを実行した結果です。ピンク色のドットで集水面積がCatchment Area(km2) =  63.91km2、青色のドットで74.30km2と出ました。

 国土交通省四国地方整備局山鳥坂ダム工事事務所のHP(https://www.skr.mlit.go.jp/yamatosa/yamatosakadam/index.html)を参照すると、山鳥坂ダムの集水面積は63.8km2となっていますので、先ほどご説明したピンク色のドットが表している集水面積は誤差はありますが、まあまあ当たっていると思っています。

"""Adjust_Catchment_Area(km2) = 412.1
   Farst Catchment Area(km2) =  437.1
   早明浦ダム集水面積417km2(汗見川取水除き)"""

 具体的な計算方法に入る前に「集水面積とは何か?」という定義について考えます。日本ダム協会のHPにある関連用語集には「河川のある地点について、降雨がその地点に流出する全領域を集水区域、または集水域といい、その面積を集水面積といいます。」という説明(

http://damnet.or.jp/cgi-bin/binranB/JitenKM.cgi?id=143)がございます。

1.四国地方の標高データ(GSI(国土地理院)の地理院タイル(GSI-Tile=DigitalElavationModel=便宜的にMeshと呼びます)のダウンロード

 わたしのブログの中の別のページにまとめておりますので、こちらをご参照ください。https://shikuuk.blogspot.com/2025/02/python-download-digital-elevation.html

2.GIS(Geographic Information System)とを活用する上で役立つ関数・コード集

 GISを利用する上で役立つ関数やコードをわたしのブログの以下のリンク先にまとめていますので、必要に応じて、参考にしてください。

https://shikuuk.blogspot.com/2025/02/pythondemcodefunction.html

3.任意の経度・緯度地点における集水面積の計算

 前述の1.、2.を使用すると、概略ではありますが、任意の経度・緯度地点における集水面積を計算できます。計算方法の概念は以下のとおりです。

  1. 対象地点の経度・緯度をGSI-Tile内部座標(column, row)に変換
  2. 対象地点の標高値を取得
  3. 対象地点の標高値(A)と、対象地点に隣接するMeshの標高値(B)を比較し、もし、標高値(A)<=(B)ならば、(B)のメッシュは集水範囲と判定します。
  4. 次に(B)のメッシュに隣接するMeshについて標高値を比較して、集水範囲かどうかを判定します。以降、これを繰り返していきます。
  5. 最後に、計算した集水範囲に「穴がないか」、「本来、集水範囲でない部分を含んでいないか」をチェックして終了

 こまごまとした技術(例えば、ZoomLevelはどれを使うのがよいのかなどなど)がたくさん必要です。わたしが作成したコードは誤差もあり、また、正確に集水面積を計算できない場合もあるということで、現時点ではウェブ掲載・公表は差し控えておきます。もし、コードに興味がある方はコメントをお願いします。興味のある方が多く、かつ、誤差があること、正確に集水面積が計算できないケースがあることを理解いただけるようでしたら、ウェブ掲載や公表について検討したいと思います。

 ここからは集水面積の代表的な計算結果を掲載させていただきます。

(1)山鳥坂ダム地点

 冒頭の画像でも紹介していますが、国土交通省さまが愛媛県大洲市・西予市で建設を進めている山鳥坂ダムの集水面積を計算してみました。山鳥坂ダムの経度緯度を仮に、

eval_location_lonlat = [132.70401868200022, 33.46112206780738] #山鳥坂ダム地点

としたときに、この地点の集水面積をわたしなりに計算した結果は以下の通りでございます。

lonlat by func_colrow_to_lonlat (132.703857421875, 33.461234146803) Original Catchment area(km2): 67.57013402296258 Length of adjust_ca_inner_tile_colrow_list 16838 Fill gap_Catchment_Area(km2): 67.58217503288645 Remove Arround Catchment Area(km2): 63.809325256730546 Catchment Area(km2) = 63.809325256730546

Official(国交省山鳥坂ダム工事事務所さま)のCatchment Areaが63.8km2なのでジャストミートです。集水域(赤色領域が最終的な集水域です)をGSIのMapに示すと以下のような感じです。


(2)横瀬川ダム地点

 横瀬川ダム地点の集水面積は11.4km2(国土交通省 横瀬川ダム統合管理事務所HP:https://www.skr.mlit.go.jp/watarigawadam/yokoze/syogen.html)となっています。

 集水面積の計算結果は以下のとおりで11.2km2となりました。ほぼジャストミートといえると思っています。

Evaluation Lon Lat [132.815094, 33.012586]

lonlat by func_colrow_to_lonlat (132.81509399414062, 33.012694094121315) Original Catchment area(km2): 12.651087760046213 Length of adjust_ca_inner_tile_colrow_list 3156 Fill gap_Catchment_Area(km2): 12.66714243994475 Remove Arround Catchment Area(km2): 11.246303268924331 Catchment Area(km2) = 11.246303268924331


(3)長瀬ダム地点

 長瀬ダム地点の集水面積は295.2km2(ダム便覧HP:http://damnet.or.jp/cgi-bin/binranA/All.cgi?db4=2309)となっています。

 集水面積の計算結果は以下のとおりで295.1km2となりました。ほぼジャストミートといえると思っています。

Evaluation Lon Lat [133.865303, 33.70544](column, row = 2443, 1057)

Original Catchment area(km2): 305.24361524088664 Length of adjust_ca_inner_tile_colrow_list 76221 Fill gap_Catchment_Area(km2): 305.9259391365744 Remove Arround Catchment Area(km2): 295.0930438750373 Catchment Area(km2) = 295.0930438750373


(4)魚梁瀬ダム地点

 魚梁瀬ダム地点の集水面積(直接)は100.7km2(ダム便覧HP:http://damnet.or.jp/cgi-bin/binranA/All.cgi?db4=2321)となっています。

 集水面積の計算結果は以下のとおりで99.8km2となりました。これもほぼジャストミートといえると思っています。

Evaluation Lon Lat [134.106983, 33.599479](column, row = 2795, 1242)

Original Catchment area(km2): 103.64098608499788 Length of adjust_ca_inner_tile_colrow_list 25892 Fill gap_Catchment_Area(km2): 103.92194298322227 Remove Arround Catchment Area(km2): 99.80793125922246 Catchment Area(km2) = 99.80793125922246


(5)内場ダム地点

 内場ダム地点の集水面積は28km2(ダム便覧HP:http://damnet.or.jp/cgi-bin/binranA/All.cgi?db4=2321)となっています。

 集水面積の計算結果は34.3km2となりました。やや過大評価になっています。香川県と徳島県の県境、いわゆる讃岐山脈あたりの地形は複雑で、このあたりの計算結果は誤差が大きくなる傾向にあることがわかりました。


(6)面河ダム地点

 面河ダム地点の集水面積(直接)は16.8km2(ダム便覧HP:http://damnet.or.jp/cgi-bin/binranA/All.cgi?db4=2258)となっています。

 集水面積の計算結果は26.5km2となりました。やや過大評価になっています。面河ダムが設置されている支流の西隣にある別の支流の集水面積の一部を取り込んでしまっているのがわかります。


(7)長安口ダム

 長安口ダム地点の集水面積(直接)は494.3km2(ダム便覧HP:http://damnet.or.jp/cgi-bin/binranA/All.cgi?db4=2122)となっています。

 集水面積の計算結果は295.5km2となりました。かなり過少評価になっています。長安口ダムが設置されている支流の西隣にある別の支流の集水面積の一部を取り込んでしまっているのがわかります。







3.四国地区の河川データのダウンロード

国土交通省さまが整備している国土数値情報ダウンロードサイト(https://nlftp.mlit.go.jp/ksj/index.html)にある「河川データ」を活用させていただきます。国土数値情報ダウンロードサイトでは「地形、土地利用、公共施設などの国土に関する基礎的な情報をGISデータとして整備し、無償で提供」しており、多種多様な無数のGIS情報がShapeファイルなどの形式で提供されています。

このWebSiteから「水域」の河川ライン(ポイント)(非商用)を利用させていただきます。(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-W05.html

最初は初心者らしく、四国四県の河川情報をダウンロードして、GoogleDriveにアップロードして利用していたのですが、データ容量が大きいので、Pythonのコードから直接データを読み込んで処理する方法に見直しています。見直しにあたってはChatGPTやGoogleGeminiにたくさんアドバイスをいただきました。






コメント