国土交通省の国土数値情報・行政区域データ から行政界を作成し PostGIS 形式のバックアップファイルを作成する。
以下の URL からダウンロード可能:
pg_restore
で取り込める。
データベースを作成し、PostGIS 拡張を有効にする。 ここではデータベース名を geo とする。
$ createdb -U postgres geo
$ cat << EOF | psql -U postgres -d geo
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
SELECT postgis_full_version();
EOF
最終的にデータを入れるテーブルを用意する。
$ psql -U postgres -d geo -f address_boundary.sql
国土数値情報ダウンロードサービスからZIPファイルをダウンロードする。 47都道府県が個別のファイルになっているので、ダウンロードした ZIP ファイルを展開する。
$ for f in N03-*.zip
do
unzip -d ${f%.zip} $f
done
Shape 形式のファイルを PostGIS にインポートするための SQL ファイルに変換する。
$ for f in N03-*/*.shp
do
t=`basename $f`
sql=${t%.shp}.sql
shp2pgsql -W "Shift_JIS" $f > $sql
done
出来上がった SQL ファイルを先ほど作成したデータベースに対して実行する。
$ for f in N03-*.sql
do
psql -U postgres -d geo -f $f
done
住所コードで集約したときに名称が不一致になるレコードを抽出する。
$ for i in {01..47}
do
psql -U postgres -d geo -t -f checkdup.sql -v table="n03-13_${i}_130401"
done | grep "|"
名称が不一致のレコードを修正する。
不一致パターンを追加したい場合は patch.sql
を修正する。
$ psql -U postgres -d geo -f patch.sql
住所コードをキーにして単一のテーブルにデータを集約する。
$ for i in {01..47}
do
psql -U postgres -d geo -f transform.sql -v table="n03-13_${i}_130401"
done
テーブルの件数を確認する。
$ echo "SELECT count(*) FROM address_boundary;" | psql -U postgres -d geo
ダンプファイルを作成する。 address_boundary テーブルだけが含まれる圧縮形式のファイルで出力する。
$ pg_dump -F c -x -U postgres -d geo -t address_boundary -f address_boundary.backup
S3に保存する。
アクセスキーなどは ~/.aws/config
で設定しておく。
$ S3_BUCKET=s.kitazaki.name
$ S3_PATH=datasets/mlit
$ fname=address_boundary.backup
$ aws s3 cp $fname s3://$S3_BUCKET/$S3_PATH/$fname
住所.jpからTSV形式のデータをダウンロードする。
ファイルのエンコーディングは ShiftJIS なので、 iconv
で UTF8 に変換する。
$ iconv -f cp932 -t utf8 < zenkoku.txt > zenkoku-utf8.txt
都道府県のコードと名称のマッピングを作成する。
$ awk 'NR > 1 { printf "%02d\t%s\t%s\n", $2, $8, $9 }' zenkoku-utf8.txt |
tr -d '"' | uniq > pref.txt
同様に、市区町村のコードと名称のマッピングを作成する。
$ awk 'NR > 1 { printf "%05d\t%s\t%s\n", $3, $10, $11 }' zenkoku-utf8.txt |
tr -d '"' | tr 'ケ' 'ヶ' | tr '逹' '達' | uniq > address.txt
なお、元データの表記が揃っていない部分があるので調整する。
- 鶴ヶ島市(11241)の「ヶ」の大きさを揃える
- 羽咋郡宝達志水町(17386)の「逹」を揃える
- 国土数値情報 ダウンロードサービス
- 国土数値情報(行政区域データ) 国土交通省 平成25年度データ