国土交通省・位置参照情報ダウンロードサービスのデータ(Ubuntu を使用)
【概要】
国土交通省・位置参照情報ダウンロードサービスから「街区レベル位置参照情報」「大字・町丁目レベル位置参照情報」(住所と緯度経度の対応データ)を CSV 形式で入手し、Ubuntu 上でテーブルを定義して SQLite3 に投入し、確認表示する手順を示す。
【目次】
【関連する外部ページ】
国土交通省・位置参照情報ダウンロードサービス: https://nlftp.mlit.go.jp/isj/
【サイト内の関連情報】
国土交通省・位置参照情報ダウンロードサービスによるダウンロード
- 国土交通省・位置参照情報ダウンロードサービスのページを開く
- 注意事項を確認の上、「位置参照情報ダウンロードサービスへ」をクリック
- ダウンロード方式を選択する
下図では「市町村単位」をクリックしている。
- 地図を使用して、県を選択
- ダウンロードしたい市町村をチェックし、「選択」をクリック
- ダウンロードしたいファイルをチェックし、「選択」をクリック
- 利用規約を確認する
- 「ダウンロード」をクリック
- アンケートに協力する
- ダウンロードが始まる。ファイル名を確認しておく。
- 複数の zip ファイルをダウンロードしたときは、次の bash スクリプトで一度に展開(解凍)できる
#!/bin/bash downloaddir=/usr/local/isj workingdir=/tmp/isj mkdir ${workingdir} cp ${downloaddir}/*.zip ${workingdir} cd ${workingdir} for i in *.zip; do unzip $i done
テーブル定義とテーブルの作成(Ubuntu,SQLite3 を使用)
使用するソフトウェア
- SQLite 3(データベースを扱うソフトウェア)
テーブル定義
大字・町丁目のレベルと街区のレベルを扱うために、2つのテーブルを定義する。次の bash スクリプトは、各テーブルを作り直してから定義する。
#!/bin/bash
rm -f /tmp/isjdb
#
cat >/tmp/a.$$.sql <<-SQL
drop table 大字町丁目レベル位置参照情報;
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/isjdb
#
cat >/tmp/a.$$.sql <<-SQL
drop table 街区レベル位置参照情報;
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/isjdb
#
cat >/tmp/a.$$.sql <<-SQL
create table 大字町丁目レベル位置参照情報 (
都道府県コード integer not null,
都道府県名 text,
市区町村コード integer not null,
市区町村名 text,
大字町丁目コード text,
大字町丁目名 text,
緯度 real,
経度 real,
原典資料コード integer,
大字・字・丁目区分コード integer
);
create table 街区レベル位置参照情報 (
都道府県名 text,
市区町村名 text,
大字・丁目名 text,
小字・通称名 text,
街区符号・地番 text,
座標系番号 integer,
X座標 real,
Y座標 real,
緯度 real,
経度 real,
住居表示フラグ integer,
代表フラグ integer,
更新前履歴フラグ integer,
更新後履歴フラグ integer
);
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/isjdb
テーブルの作成
展開した CSV ファイルを、文字コードを UTF-8 にそろえてから(nkf -w)、ヘッダ行を除いて(tail -n +2)SQLite3 に投入する。大字・町丁目レベルは -15.0b のディレクトリ、街区レベルは -20.0a のディレクトリに含まれる CSV を対象とする。
#!/bin/bash
cat >/tmp/b.$$.sql <<-SQL
.mode csv
.import /tmp/b.$$.csv 大字町丁目レベル位置参照情報
vacuum;
SQL
cat >/tmp/a.$$.sql <<-SQL
.mode csv
.import /tmp/a.$$.csv 街区レベル位置参照情報
vacuum;
SQL
#
workingdir=/tmp/isj
cd ${workingdir}
for i in *-15.0b/*.csv; do
echo $i
tail -n +2 $i | nkf -w > /tmp/b.$$.csv
cat /tmp/b.$$.sql | sqlite3 /tmp/isjdb
done
echo 'select * from 大字町丁目レベル位置参照情報 limit 10;' | sqlite3 /tmp/isjdb
#
for i in *-20.0a/*.csv; do
echo $i
tail -n +2 $i | nkf -w > /tmp/a.$$.csv
cat /tmp/a.$$.sql | sqlite3 /tmp/isjdb
done
echo 'select * from 街区レベル位置参照情報 limit 10;' | sqlite3 /tmp/isjdb