以前の記事で国土交通省の国土数値情報の河川データが破損していると口を酸っぱくして述べたが,いつの間にか修復されていた.修復されていたのは北海道および茨城県のテーブル構造である.岐阜県と三重県のファイルは破損したままであり,修復を要した.
参考:QGISのフィールド計算機で国土数値情報の河川データの属性を修正する
国土数値情報河川データのダウンロード
国土数値情報ダウンロードサービスから入る.ダウンロードボタンをクリックする.

GISホームページ利用者アンケート
GISホームページ利用者アンケート画面に遷移する.任意なので閉じてダウンロードしても良い.

各都道府県につき3個のファイルを一つのフォルダにまとめる
zipファイルに圧縮された状態で.dbfファイル,.shpファイル,.shxファイルの3個が1都道府県につきダウンロードされる.他にもgmlファイルなどがダウンロードされるが今回は使用しないので廃棄する.今回使用するのはファイル名にStreamとの文字列のあるファイルである.
zipファイルの中身を取り出し,一つのフォルダにまとめておく.
ファイル名の変更は規則的に
下図をよく見ると分かるが,W05-の直後の二桁の数値は都道府県とは無関係である.何らかのバージョン番号なのかもしれない.都道府県に関係のあるのは_GMLの直前の二桁の数値である.

下図のように無関係の数値や記号をファイル名から手動で削除する.この作業は後でSQL ServerでINSERTする時に必要になる.

Shape2SQLでSQL Serverにアップロード
今回は1ファイルずつShape2SQLでSQL Serverにアップロードし,SQL Server内で一つのテーブルにまとめることにする.
下図のようにデータベースとシェープファイルを指定し,Upload to Databaseをクリックする.殆どのファイルはアップロードが成功する.しかし,Geographyを選択するとアップロード自体が停止するファイルが存在した.21番目の岐阜県と24番目の三重県である.興味深いことにPlanar Geometryを選択するとエラーが出現しつつもアップロードそのものは成功した.また,QGISでシェープファイルを修復すると文字化けが発生した.国土交通省はこういうファイルの内部にもチェックをしていただきたい.

新しくテーブルを作成し,アップロードしたテーブルからデータを集める
下記クエリを実行して新たにテーブルを1つ作成する.
USE [JAPANRIVERDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[W05_Stream]( [ID] [int] IDENTITY(1,1) NOT NULL, [W05_001] [nvarchar](255) NULL, [W05_002] [nvarchar](255) NULL, [W05_003] [nvarchar](255) NULL, [W05_004] [nvarchar](255) NULL, [W05_005] [nvarchar](255) NULL, [W05_006] [nvarchar](255) NULL, [W05_007] [nvarchar](255) NULL, [W05_008] [nvarchar](255) NULL, [W05_009] [nvarchar](255) NULL, [W05_010] [nvarchar](255) NULL, [geom] [geography] NULL, PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO ALTER TABLE [dbo].[W05_Stream] WITH CHECK ADD CONSTRAINT [enforce_srid_geometry_W05_Stream] CHECK (([geom].[STSrid]=(4326))) GO ALTER TABLE [dbo].[W05_Stream] CHECK CONSTRAINT [enforce_srid_geometry_W05_Stream] GO
下記クエリを実行してデータを集める.FROM句の連番をインクリメントして47回繰り返す.
USE JAPANRIVERDB; GO INSERT INTO dbo.W05_Stream ( [W05_001] , [W05_002] , [W05_003] , [W05_004] , [W05_005] , [W05_006] , [W05_007] , [W05_008] , [W05_009] , [W05_010] , [geom] ) SELECT [W05_001] , [W05_002] , [W05_003] , [W05_004] , [W05_005] , [W05_006] , [W05_007] , [W05_008] , [W05_009] , [W05_010] , [geom] FROM dbo.[W05_01-g_Stream]
河川テーブル,水域系テーブルを作成する
国土数値情報の河川データの水域系コードを探索するで述べたように,河川テーブルおよび水域系テーブルを作成する.水系域コード種別と河川コード種別である.テーブル名はそれぞれT_WaterSystem, T_Riverとする.
クエリ
下記クエリを実行してみる.’河川名’には今回「最上川」を指定してみた.
SELECT[ID] ,[W05_001] ,[W05_002] ,[W05_004] ,[geom] ,R.RiverName ,W.WaterSystem FROM [JAPANRIVERDB].[dbo].[W05_Stream] AS S INNER JOIN dbo.T_River AS R ON S.W05_002=R.RiverCode INNER JOIN dbo.T_WaterSystem AS W ON S.W05_001=W.WaterSystemCode WHERE W.WaterSystem='河川名'
結果
結果は以下である.
(2360 行処理されました)

“国土数値情報の河川データが一部直っていた件” への1件の返信