やりたいこと
- Excelの「緯度」「経度」(10進数)をもとに、市区町村(+必要なら政令市の区)を付与して、Excelに書き出す
- APIの逆ジオコーディングに頼らず、QGISというソフトを使い、空間結合+国土数値情報 N03(行政区域ポリゴン)で一括処理する
ターゲット
- PythonとかAPIとか使えない、使ったことない・・・という人
- QGIS 初心者~中級者(筆者は初心者以下です。今日初めて触った)
準備
QGISのインストール
公式サイトからダウンロードし、インストールしてください。
必要に応じて日本語化してください。(パッチを当てなくても設定でできるはず)
市区町村の位置データを入手
市区町村の位置データを入手します。
DLしたZIPを解凍すると、.shpデータがあります。これを使います。
手順
元になるExcelを準備する
こういうカラムになっているとします。
A列:連番(ユニークコード)
B列:都道府県
C列:市区町村(★これが欲しい)
D列:緯度(10進数)
E列:経度(10進数)
QGISに市区町村の位置データを読み込む
QGISを起動します。(インストールするとなぜかDesktopにフォルダができますが、その中にショートカットがあります)
起動したら、レイヤ →レイヤを追加 →ベクタレイヤを追加 を選択
手元のデータの位置情報(点)を取り込み
手元にあるデータの位置情報を取り込みます。
これをQGISで読み込みます。
画面左のバーで「CSVテキスト」を選択し、下記のように設定
- ファイル名→ファイルパスを指定(...から指定できる)
- 文字コード→UTF-8
- ファイル形式→CSV(コンマで区切られた値)
- ポイント座標
-- X軸→経度
-- Y軸→緯度
-- ※「度分秒を使う」のチェックは入れません
設定したら「追加」
空間インデックスの作成
処理の高速化のため、「空間インデックス」を作成します。
これをしないと、あとの手順で膨大な時間がかかることがあります。
ツールボックスを開きます。
「空間」「インデックス」などで検索し、「空間インデックスを作成」ツールをダブルクリックして開きます。
まずはN03のレイヤ(市区町村レイヤ)を選択して実行します。
一瞬で終わる場合がありますが、ログを見て終わったことを確認してください。
同じように、元データの点レイヤにも空間インデックスを付与しておいてください。
元データの点と市区町村の位置データ を結合
上部メニュー 「ベクタ」→「Data management tool」→「属性の空間結合」を起動します。
-
地物を結合するレイヤ:元データ(点)
-- 空間的関係:「交差する」
※必要に応じて他の関係を選んでも構いません -
「結合するフィールド」を選択する。今回は001/004/005にチェックを入れた
-- N03_001:都道府県名
-- N03_004:市区町村名(都の特別区を含む)
-- N03_005:政令指定都市の行政区名(○○市○○区の「区」)
-- N03_007:全国地方公共団体コード(5桁)
↓
「実行」押下後しばらく待つ
出力結果の調整
これで準備はできましたが、政令指定都市(〇〇市●●区 のように区がある市)は区ごとに分けたいと思います。
出力結果を計算式で調整します。
新規フィールドを作成 にチェックを入れ、
フィールド型:可変長テキスト にします。
式に下記を入れます。
CASE
WHEN "N03_005" IS NOT NULL AND "N03_005" <> ''
THEN "N03_004" || "N03_005"
ELSE "N03_004"
END
OK押下
出力
出力レイヤを右クリックし、エクスポート →新規ファイルに地物を保存 を選択
ファイル名 から保存先・保存名を設定し、
必要なカラムを選択し「OK」押下
出力したExcelを開くと、市区町村のカラムが追加されています。
札幌市は政令指定都市なので「●●市●●区」の形になっています。
もちろん出力するカラムを選べば、●●区を別カラムで出力することもできます。
さいごに
位置情報(経度・緯度)はあるけど住所がない・・・というケースは稀かもしれませんが
お役に立てれば幸いです。