平成30/ 2018-10-20 06:06
住所データ


create table addr(
prefecture_cd     varchar(2)  character set latin1 not null default '' comment '都道府県コード',
prefecture_name   varchar(20)                      not null default '' comment '都道府県名',
municipality_cd   varchar(5)  character set latin1 not null default '' comment '市区町村コード',
municipality_name varchar(60)                      not null default '' comment '市区町村名',
section_cd        varchar(12) character set latin1 not null default '' comment '大字町丁目コード',
section_name      varchar(120)                     not null default '' comment '大字町丁目名',
primary key(prefecture_cd, municipality_cd, section_cd)
)engine=innodb default charset=utf8 comment '住所'
;


mysql> select * from addr where prefecture_cd = 13 limit 0, 10;
+---------------+-----------------+-----------------+-------------------+--------------+--------------------+
| prefecture_cd | prefecture_name | municipality_cd | municipality_name | section_cd   | section_name       |
+---------------+-----------------+-----------------+-------------------+--------------+--------------------+
| 13            | 東京都          | 13101           | 千代田区          | 131010001001 | 一ツ橋一丁目       |
| 13            | 東京都          | 13101           | 千代田区          | 131010001002 | 一ツ橋二丁目       |
| 13            | 東京都          | 13101           | 千代田区          | 131010002000 | 一番町             |
| 13            | 東京都          | 13101           | 千代田区          | 131010003001 | 永田町一丁目       |
| 13            | 東京都          | 13101           | 千代田区          | 131010003002 | 永田町二丁目       |
| 13            | 東京都          | 13101           | 千代田区          | 131010004001 | 猿楽町一丁目       |
| 13            | 東京都          | 13101           | 千代田区          | 131010004002 | 猿楽町二丁目       |
| 13            | 東京都          | 13101           | 千代田区          | 131010005001 | 霞が関一丁目       |
| 13            | 東京都          | 13101           | 千代田区          | 131010005002 | 霞が関二丁目       |
| 13            | 東京都          | 13101           | 千代田区          | 131010005003 | 霞が関三丁目       |
+---------------+-----------------+-----------------+-------------------+--------------+--------------------+
10 rows in set (0.10 sec)

mysql>


手順
<frame>
位置参照情報
http://nlftp.mlit.go.jp/isj/index.html
で、「大字・町丁目レベルのみ」をダウンロードする。
(「街区レベルのみ」は番地まではいっているが都道府県コードとか無くて不便。)

CSVファイルは都道府県ごとなので、
47ファイルダウンロードして、
UTF8で保存しなおす。

面倒なのでファイル1つにする
<frame>
cat 01_2013.csv \
02_2013.csv \
03_2013.csv \
04_2013.csv \
05_2013.csv \
06_2013.csv \
07_2013.csv \
08_2013.csv \
09_2013.csv \
10_2013.csv \
11_2013.csv \
12_2013.csv \
13_2013.csv \
14_2013.csv \
15_2013.csv \
16_2013.csv \
17_2013.csv \
18_2013.csv \
19_2013.csv \
20_2013.csv \
21_2013.csv \
22_2013.csv \
23_2013.csv \
24_2013.csv \
25_2013.csv \
26_2013.csv \
27_2013.csv \
28_2013.csv \
29_2013.csv \
30_2013.csv \
31_2013.csv \
32_2013.csv \
33_2013.csv \
34_2013.csv \
35_2013.csv \
36_2013.csv \
37_2013.csv \
38_2013.csv \
39_2013.csv \
40_2013.csv \
41_2013.csv \
42_2013.csv \
43_2013.csv \
44_2013.csv \
45_2013.csv \
46_2013.csv \
47_2013.csv \
> all.csv
</frame>

CSV保存用のテーブルつくる
<frame>
create table addrtmp(
prefecture_cd     varchar(2)  character set latin1 not null default '' comment '都道府県コード',
prefecture_name   varchar(20)                      not null default '' comment '都道府県名',
municipality_cd   varchar(5)  character set latin1 not null default '' comment '市区町村コード',
municipality_name text                             not null            comment '市区町村名',
section_cd        varchar(12) character set latin1 not null default '' comment '大字町丁目コード',
section_name      text                             not null            comment '大字町丁目名',
lat               varchar(30) character set latin1 not null default '' comment '緯度',
lng               varchar(30) character set latin1 not null default '' comment '経度',
material_cd       varchar(1)  character set latin1 not null default '' comment '原典資料コード(1:自治体資料 2:街区レベル位置参照 3:1/25000地形図 0:その他資料)',
section_type      varchar(1)  character set latin1 not null default '' comment '大字、字、丁目区分コード(1:大字 2:字 3:丁目 0:不明)'
)engine=innodb default charset=utf8 comment '住所'
;
</frame>

mysqlログインして以下を実行する
<frame>
load data infile '/home/zz.jp/work/20141020/address/all.csv'
into table addrtmp
fields terminated by ',' ENCLOSED BY '"'
lines  terminated by '\r\n'
IGNORE 1 lines
;
</frame>

file権限が無い場合は以下。
<frame>
grant file on *.* to zz@localhost;
</frame>
flle権限は、*.*にしないと権限付与できない。

テーブル作る
<frame>
create table addr(
prefecture_cd     varchar(2)  character set latin1 not null default '' comment '都道府県コード',
prefecture_name   varchar(20)                      not null default '' comment '都道府県名',
municipality_cd   varchar(5)  character set latin1 not null default '' comment '市区町村コード',
municipality_name varchar(60)                      not null default '' comment '市区町村名',
section_cd        varchar(12) character set latin1 not null default '' comment '大字町丁目コード',
section_name      varchar(120)                     not null default '' comment '大字町丁目名',
primary key(prefecture_cd, municipality_cd, section_cd)
)engine=innodb default charset=utf8 comment '住所'
;
</frame>
municipality_nameは、最長10桁(30byte)だったので余裕みて60byteにした。
municipality_nameは、最長18桁(54byte)だったので余裕みて120byteにした。
lat, lngの違いだけで、primary key(prefecture_cd, municipality_cd, section_cd)ができないデータあるので、lat, lngといらなそうなの削除した。

仮のデータからINSERTする
<frame>
insert into addr select distinct prefecture_cd, prefecture_name, municipality_cd, municipality_name, section_cd, section_name from addrtmp;
</frame>

仮で作ったテーブル削除する
<frame>
drop table addrtmp;
</frame>
</frame>