未分類

緯度経度から住所を取得する

作ったCSVデータをGitHubにあげています

緯度経度から住所を取得する

緯度経度から住所データを取得する方法は2つ

  1. 他人に任せる:地図APIを叩く- Google Maps API
  2. 自分でやる:緯度経度と住所の対応表から自前で計算する

今回は2.の話。

対応表データ

緯度経度と住所の対応表のデータがないといけません。これには政府の統計資料を利用します。

政府統計 e-Stat

番地まではできませんが、そのうえの小地域(丁目)までは取得することができます。

“地図で見る”
-> “境界データダウンロード”
-> “小地域”
-> “国勢調査”
-> “2015年”
-> “小地域(町丁・字等別)”

いずれかの形式が選択可能です。

  • Shape形式
  • KML形式
  • GML形式

今回はShape形式を利用します。

  • 都道府県名
  • 小地域名
  • 複数の座標による境界
  • など

がデータに含まれています。

 

Shape形式からCSV形式変換しちゃいます。

 

地域名に対して、地域の境界に含まれる座標を順に記載できれば使いやすいのではないかなと思います。

地域名,経度,緯度
area_A,x_A1,y_A1
area_A,x_A2,y_A2
area_A,x_A3,y_A3
area_A,x_A4,y_A4
area_B,x_B1,y_B1
area_B,x_B2,y_B2
area_B,x_B3,y_B3
....

下記を参考にします。

Qiita-Pythonで国土数値情報のShapeFileを操作してデータベースにインポートしてみる

import shapefile

sf = shapefile.Reader('h27ka01.shp')
shapeRecs = sf.iterShapeRecords()
outputs = []

# ヘッダ
print("name,longtitude,latitude")
for i, sr in enumerate(shapeRecs):

  town = ""
  record = sr.record
  for idx in [4, 5, 6]:
    try:
      # shift-jisでデータが入っている
      town += record[idx].decode('shift-jis')
    except Exception as e:
      # たまにうまく変換できない、ため例外
      town += ""

  for p in sr.shape.points:
    # 出力
    print("" + town + ",{},{}".format(p[0], p[1]))

 

以上でCSVができあがりました。

GitHubリポジトリには利用するためのサンプルソースも付属しています。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中