国土数値情報の河川データが一部直っていた件

 以前の記事で国土交通省の国土数値情報の河川データが破損していると口を酸っぱくして述べたが,いつの間にか修復されていた.修復されていたのは北海道および茨城県のテーブル構造である.岐阜県と三重県のファイルは破損したままであり,修復を要した.

参考:QGISのフィールド計算機で国土数値情報の河川データの属性を修正する

QGISで国土数値情報のシェープファイルを修正する

国土数値情報の河川データの属性テーブルを編集してみたが…

国土数値情報河川データのダウンロード

 国土数値情報ダウンロードサービスから入る.ダウンロードボタンをクリックする.

国土数値情報ダウンロードサービス
国土数値情報ダウンロードサービス

GISホームページ利用者アンケート

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

GISホームページ利用者アンケート
GISホームページ利用者アンケート

各都道府県につき3個のファイルを一つのフォルダにまとめる

 zipファイルに圧縮された状態で.dbfファイル,.shpファイル,.shxファイルの3個が1都道府県につきダウンロードされる.他にもgmlファイルなどがダウンロードされるが今回は使用しないので廃棄する.今回使用するのはファイル名にStreamとの文字列のあるファイルである.

 zipファイルの中身を取り出し,一つのフォルダにまとめておく.

ファイル名の変更は規則的に

 下図をよく見ると分かるが,W05-の直後の二桁の数値は都道府県とは無関係である.何らかのバージョン番号なのかもしれない.都道府県に関係のあるのは_GMLの直前の二桁の数値である.

zipファイル名に注目
zipファイル名に注目

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

無関係の数字と記号を削除
無関係の数字と記号を削除

Shape2SQLでSQL Serverにアップロード

 今回は1ファイルずつShape2SQLでSQL Serverにアップロードし,SQL Server内で一つのテーブルにまとめることにする.

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

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

新しくテーブルを作成し,アップロードしたテーブルからデータを集める

 下記クエリを実行して新たにテーブルを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 行処理されました)
SQL Serverの空間クエリ結果
SQL Serverの空間クエリ結果

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

コメントを残す

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

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