国土数値情報のダムデータをSQL Serverにアップロードする

 ダムには目的がある.治水,利水,河川維持,発電などである.今回は国土数値情報ダウンロードサービスの内,ダムデータをダウンロードしてみた.

ダムデータのダウンロード

 データはこちらになる.平成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 としてシェープファイルをアップロードしている.

Shape2SQLでSQL Serverにアップロード
Shape2SQLでSQL Serverにアップロード

コードサンプル

 下記コードでダムテーブルから全件抽出する.

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 行処理されました)

 このクエリは速い.しかし河川名が一致せず,ダムを全件抽出できない.ここでも河川コードと水系コードの必要性を痛感する.

メタデータ

W01-14_GML.zipのメタデータ
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 河川名はそれぞれ水系コード,河川コードに書き換えるべきである.

 ダム事業者は各省庁および電力会社であるが,菅総理大臣の時に各省庁の管理は国土交通省に一元化された.豪雨による洪水を防ぐための事前放流を国土交通省の判断で行えるようにするためである.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください