国勢調査の結果がeStatに掲載され始めている.今回は小地域の境界データをダウンロードし,SQL Serverにアップロードするまでの記録を記す.
小地域の境界データをダウンロードする
前半は図解を中心に解説する.
eStatトップページから地図
境界データダウンロード
小地域
国勢調査
小地域(町丁・字等別)(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のSever name, Select or enter a database nameを入力
データを格納したいデータベースを選ぶ.ここではZIPCODEデータベースを指定している.
Shapefileの右端の…ボタンをクリックしてダイアログでシェープファイルを指定する.Upload to DatabaseをクリックするとシェープファイルがSQL Serverにアップロードされる.47個のシェープファイルにつき同様の手順を繰り返す.
Shape2SQLでアップロードされたテーブル
47都道府県のシェープファイルをアップロードすると下図のような状態になる.実は3個ほどアップロードに失敗している.該当する都道府県は群馬県,香川県,佐賀県である.原因は不明である.この作業の後,世界測地系経度緯度の方で試みるとすべてうまく行った.
レコードを集めるテーブルを作成
下記のクエリを実行してテーブルを作成する.
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件の返信