ダムには目的がある.治水,利水,河川維持,発電などである.今回は国土数値情報ダウンロードサービスの内,ダムデータをダウンロードしてみた.
ダムデータのダウンロード
データはこちらになる.平成26年版をダウンロードする.zipファイルに圧縮されており,展開すると使えるようになる.
Shape2SQLでSQL Serverにアップロード
Windows 11 では .NET Framework のアップデートが行われており,Shape2SQL が動作しなくなった.2022-09 x64 (KB5017859) 向け Windows 11 用 .NET Framework 3.5、4.8 および 4.8.1 の累積的な更新プログラムのプレビューあたりが怪しいと睨んで端末をリセットして Windows 11 の初期バージョンをインストールし直すと動作するようになった.今後注意が必要である.しかし,その後同プラグラムを再インストールしても Shape2SQL は動作した.Shape2SQL の挙動はよく分からないというのが正直なところである.
ジオメトリのプロパティはアップロード先のデータベースのテーブルでジオメトリの格納されている列のデータ型に合わせる必要がある.データ型と SRID が一致していないと SQL Server の様々なメソッドが使えなくなる.下図では geography 型で SRID 4326 としてシェープファイルをアップロードしている.
コードサンプル
下記コードでダムテーブルから全件抽出する.
USE JAPANRIVERDB; GO
SELECT * FROM dbo.T_Dam
(2749 行処理されました)
下記コードで河川テーブルと結合しているが,結合条件に水系名を使っているため,なぜかダムの件数よりも多くなっている.これはダムテーブルの属性が水系名,河川名を使用しているためで,本来なら水系コード,河川コードを使わなければならない.マスターの不備である.
SELECT * FROM dbo.T_Dam AS D INNER JOIN dbo.W05_Stream AS W ON D.W01_003 = W.W05_004
(310067 行処理されました)
結合条件に STIntersect() メソッドを使ってみると,今度は実際よりも遥かに少ない件数しか抽出されない.河川の流路の LineString とダムの Point が厳密に交差しないと結合条件が真にならないためで,これは仕方あるまい.
SELECT * FROM dbo.T_Dam AS D INNER JOIN dbo.W05_Stream AS W ON D.geom.STIntersects(W.geom) = 1
(74 行処理されました)
結合条件に STBuffer() メソッドを加えてみると,クエリが非常に遅くなった(実行には 30 分かかった).
SELECT * FROM dbo.T_Dam AS D INNER JOIN dbo.W05_Stream AS W ON D.geom.STBuffer(10).STIntersects(W.geom) = 1
(1250 行処理されました)
STBuffer() の引数を 20 にしてみたところ,実行時間は変わらず,結果は 1718 件であった.引数 40 では 2326 件であった.引数 80 だと 3004 件であった.テーブルの結合条件を追加したほうが良さそうである.
SELECT * FROM dbo.T_Dam AS D INNER JOIN dbo.W05_Stream AS W ON D.geom.STBuffer(80).STIntersects(W.geom) = 1 AND D.W01_004 = W.W05_004
(1927 行処理されました)
このクエリは速い.しかし河川名が一致せず,ダムを全件抽出できない.ここでも河川コードと水系コードの必要性を痛感する.
メタデータ
shp属性名 | 属性名 | 説明 |
---|---|---|
W01_001 | ダム名 | ダムの名称 |
W01_002 | ダムコード | ダム年鑑の「全国ダム施設現況」の「水系別ダム一覧表」に示す番号 |
W01_003 | 水系名 | ダムが設置されている水系の名称 |
W01_004 | 河川名 | ダムが設置されている河川の名称 |
W01_005 | 形式 | ダムの形式の種類による区別.コードリスト「ダム形式コード」 |
W01_006 | 目的 | ダム設置の用途.コードリスト「ダム目的コード」 |
W01_007 | ダム規模(堤高) | 単位は「m」とする |
W01_008 | ダム規模(堤頂長) | 単位は「m」とする |
W01_009 | 堤体積 | 単位は「千m3」とする |
W01_010 | 総貯水量 | 単位は「千m3」とする |
W01_011 | ダム事業者 | ダムを運用している組織.コードリスト「ダム事業者コード」 |
W01_012 | 竣工年 | ダムの竣工年(西暦) |
W01_013 | 所在地 | ダムが設置されている所在地名 |
W01_014 | 位置情報精度 | ダムの位置を地形図から取得する際に用いた方法によって分けられる位置情報の精度を分類したもの |
まとめ
国土数値情報のダムデータをダウンロードし SQL Server にアップロードした.
メタデータの W01_003 水系名と W01_004 河川名はそれぞれ水系コード,河川コードに書き換えるべきである.
ダム事業者は各省庁および電力会社であるが,菅総理大臣の時に各省庁の管理は国土交通省に一元化された.豪雨による洪水を防ぐための事前放流を国土交通省の判断で行えるようにするためである.