国土交通省・位置参照情報ダウンロードサービスのデータ(Ubuntu を使用)

概要

国土交通省・位置参照情報ダウンロードサービスから「街区レベル位置参照情報」「大字・町丁目レベル位置参照情報」(住所と緯度経度の対応データ)を CSV 形式で入手し、Ubuntu 上でテーブルを定義して SQLite3 に投入し、確認表示する手順を示す。

目次

関連する外部ページ

国土交通省・位置参照情報ダウンロードサービス: https://nlftp.mlit.go.jp/isj/

サイト内の関連情報

地図データ

国土交通省・位置参照情報ダウンロードサービスによるダウンロード

  1. 国土交通省・位置参照情報ダウンロードサービスのページを開く

    https://nlftp.mlit.go.jp/isj/

  2. 注意事項を確認の上、「位置参照情報ダウンロードサービスへ」をクリック

  3. ダウンロード方式を選択する

    下図では「市町村単位」をクリックしている。

  4. 地図を使用して、県を選択

  5. ダウンロードしたい市町村をチェックし、「選択」をクリック

  6. ダウンロードしたいファイルをチェックし、「選択」をクリック

  7. 利用規約を確認する

  8. ダウンロード」をクリック

  9. アンケートに協力する

  10. ダウンロードが始まる。ファイル名を確認しておく。

  11. 複数の 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 を使用)

使用するソフトウェア

テーブル定義

大字・町丁目のレベルと街区のレベルを扱うために、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