eStatから国勢調査の小地域の境界データをダウンロードしSQL Serverにアップロードする

 国勢調査の結果がeStatに掲載され始めている.今回は小地域の境界データをダウンロードし,SQL Serverにアップロードするまでの記録を記す.

小地域の境界データをダウンロードする

 前半は図解を中心に解説する.

eStatトップページから地図

eStatトップページから地図
eStatトップページから地図

境界データダウンロード

境界データダウンロード
境界データダウンロード

小地域

小地域
小地域

国勢調査

国勢調査
国勢調査

小地域(町丁・字等別)(JGD2000)

小地域(町丁・字等別)(JGD2000)
小地域(町丁・字等別)(JGD2000)

データ形式を選ぶ

 今回は「世界測地系平面直角座標系・Shapefile」を選んだが,アップロードできないファイルが3つほど存在することが後に判明した.読者には「世界測地系緯度経度・Shapefile」を選ぶことをおすすめする.

データ形式を選ぶ
データ形式を選ぶ

都道府県を選ぶ

都道府県を選ぶ
都道府県を選ぶ

都道府県全域を選ぶ

 最も上にある北海道全域を選ぶ.この作業をすべての都道府県について繰り返す.

都道府県全域を選ぶ
都道府県全域を選ぶ

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

 以前河川のデータをマージした際に属性テーブルの文字化けが発生した.原因は不明のままであるが,QGISでレイヤーをマージせずにシェープファイルを逐一アップロードすると,文字化けが発生しないことが判明した.そのためシェープファイルをアップロードした後にSQL Serverでレコードを集める方針とした.

Shape2SQLのDatabase Configuration

 Database ConfigurationではServer nameにSQL Serverのサーバー名を入力すると,Select or enter a database nameにサーバー内のデータベースがリストアップされる.

Shape2SQLのDatabase Configuration
Shape2SQLのDatabase Configuration

Shape2SQLのSever name, Select or enter a database nameを入力

 データを格納したいデータベースを選ぶ.ここではZIPCODEデータベースを指定している.

Shape2SQLのSever name, Select or enter a database nameを入力
Shape2SQLのSever name, Select or enter a database nameを入力

 Shapefileの右端の…ボタンをクリックしてダイアログでシェープファイルを指定する.Upload to DatabaseをクリックするとシェープファイルがSQL Serverにアップロードされる.47個のシェープファイルにつき同様の手順を繰り返す.

Shape2SQlの設定が終わったところ
Shape2SQlの設定が終わったところ

Shape2SQLでアップロードされたテーブル

 47都道府県のシェープファイルをアップロードすると下図のような状態になる.実は3個ほどアップロードに失敗している.該当する都道府県は群馬県,香川県,佐賀県である.原因は不明である.この作業の後,世界測地系経度緯度の方で試みるとすべてうまく行った.

Shape2SQLでアップロードされたテーブル
Shape2SQLでアップロードされたテーブル

レコードを集めるテーブルを作成

 下記のクエリを実行してテーブルを作成する.

USE [ZIPCODE]
GO
CREATE TABLE [dbo].[T_JAPAN_CITY](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[KEY_CODE] [nvarchar](255) NULL,
	[PREF] [nvarchar](255) NULL,
	[CITY] [nvarchar](255) NULL,
	[S_AREA] [nvarchar](255) NULL,
	[PREF_NAME] [nvarchar](255) NULL,
	[CITY_NAME] [nvarchar](255) NULL,
	[S_NAME] [nvarchar](255) NULL,
	[KIGO_E] [nvarchar](255) NULL,
	[HCODE] [int] NULL,
	[AREA] [float] NULL,
	[PERIMETER] [float] NULL,
	[R2KAxx] [bigint] NULL,
	[R2KAxx_ID] [bigint] NULL,
	[KIHON1] [nvarchar](255) NULL,
	[DUMMY1] [nvarchar](255) NULL,
	[KIHON2] [nvarchar](255) NULL,
	[KEYCODE1] [nvarchar](255) NULL,
	[KEYCODE2] [nvarchar](255) NULL,
	[AREA_MAX_F] [nvarchar](255) NULL,
	[KIGO_D] [nvarchar](255) NULL,
	[N_KEN] [nvarchar](255) NULL,
	[N_CITY] [nvarchar](255) NULL,
	[KIGO_I] [nvarchar](255) NULL,
	[KBSUM] [int] NULL,
	[JINKO] [bigint] NULL,
	[SETAI] [bigint] NULL,
	[X_CODE] [float] NULL,
	[Y_CODE] [float] NULL,
	[KCODE1] [nvarchar](255) NULL,
	[geom] [geometry] 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].[T_JAPAN_CITY]  WITH CHECK ADD  CONSTRAINT [enforce_srid_geometry_T_JAPAN_CITY] CHECK  (([geom].[STSrid]=(0)))
GO
ALTER TABLE [dbo].[T_JAPAN_CITY] CHECK CONSTRAINT [enforce_srid_geometry_T_JAPAN_CITY]
GO

作成したテーブルにレコードを集める

 下記のクエリを実行して作成したテーブルにレコードを集める.FROM句のテーブル連番をインクリメントして47回実行する.

USE	ZIPCODE;
GO
INSERT	INTO	[dbo].[T_JAPAN_CITY]([KEY_CODE],
	[PREF],
	[CITY],
	[S_AREA],
	[PREF_NAME],
	[CITY_NAME],
	[S_NAME],
	[KIGO_E],
	[HCODE],
	[AREA],
	[PERIMETER],
	[R2KAxx],
	[R2KAxx_ID],
	[KIHON1],
	[DUMMY1],
	[KIHON2],
	[KEYCODE1],
	[KEYCODE2],
	[AREA_MAX_F],
	[KIGO_D],
	[N_KEN],
	[N_CITY],
	[KIGO_I],
	[KBSUM],
	[JINKO],
	[SETAI],
	[X_CODE],
	[Y_CODE],
	[KCODE1],
	[geom])
SELECT		[KEY_CODE],
	[PREF],
	[CITY],
	[S_AREA],
	[PREF_NAME],
	[CITY_NAME],
	[S_NAME],
	[KIGO_E],
	[HCODE],
	[AREA],
	[PERIMETER],
	[R2KAxx],
	[R2KAxx_ID],
	[KIHON1],
	[DUMMY1],
	[KIHON2],
	[KEYCODE1],
	[KEYCODE2],
	[AREA_MAX_F],
	[KIGO_D],
	[N_KEN],
	[N_CITY],
	[KIGO_I],
	[KBSUM],
	[JINKO],
	[SETAI],
	[X_CODE],
	[Y_CODE],
	[KCODE1],
	[geom]
FROM	dbo.r2ka01

不要となったテーブルを削除する

 INSERT元のテーブルをオブジェクトエクスプローラーから削除する.

クエリ

 下記のクエリを実行すると,郵便番号テーブルと境界データテーブルを結合したレコードが抽出される.結合条件が妥当であるか否か,自信がない.

USE	ZIPCODE;
GO
SELECT	Z.郵便番号
	,	Z.都道府県名
	,	Z.市区町村名
	,	Z.町域名
	,	C.S_NAME
	,	Z.全国地方公共団体コード
	,	C.KEY_CODE
	,	C.geom
	,	C.X_CODE
	,	C.Y_CODE
	,	C.AREA
FROM	dbo.ZIPCODE	AS	Z
INNER	JOIN	dbo.T_JAPAN_CITY	AS C
ON	Z.都道府県名=C.PREF_NAME
AND	Z.市区町村名=C.CITY_NAME
AND	C.S_NAME	LIKE	Z.町域名+'%'
AND	Z.町域名	<>''
WHERE	Z.郵便番号='1000001'

 結果は以下である.郵便番号から皇居を抽出している.

郵便番号から皇居を抽出
郵便番号から皇居を抽出

世界測地系経度緯度の場合

 世界測地系経度緯度の場合,WHERE 区を省略して全件を抽出した結果は以下である.こちらの方を使うべきかもしれない.

(187849 行処理されました)
(127382 行処理されました)
(232019 行処理されました)

まとめ

 国勢調査の小地域の境界データをダウンロードし,Shape2SQLでSQL Serverにアップロードした.郵便番号テーブルと結合すると郵便番号から小地域を抽出でき,ジオメトリデータも抽出可能となった.

 郵便番号から住所を選択するWEBサービスは一般的であるが,このような仕組みであると推測される.

“eStatから国勢調査の小地域の境界データをダウンロードしSQL Serverにアップロードする” への1件の返信

コメントを残す

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

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