【Python】無料でジオコーディング(住所→緯度経度etc.)
住所⇔緯度&経度の変換をしたい、目的地までのルート検索や所要時間を調べたい、と思い良いものがないかなぁと思っていました。
すると、↓の記事でGoogle Maps APIというものがあることを知り、
qiita.com
使ってみよ~~、と思ったのですが、なんと有料でした!
一学生として有料は厳しい、、、、。で調べていくと、OSM(Open Street Map)が提供しているデータを使えばジオコーディングが無料でできるらしい。おお~~(≧▽≦)
geopyというものを使うと、住所→緯度&軽度の取得ができます
- Python 3.7.3 on win32
- geographiclib-1.50 geopy-2.0.0
$ pip install geopy
でgeopyを入れます。
プログラム
# -*- coding: utf-8 -*- from geopy.geocoders import Nominatim def main(): geolocator = Nominatim(user_agent="test-dayo") location = geolocator.geocode("日本 北九州") print("Lat, long = ",location.latitude, location.longitude) print("full address = ", location.address) # 辞書として読み取る loc_dict = dict(location.raw) print("Lat, long = ", loc_dict["lat"], loc_dict["lon"]) print("full address = ", loc_dict["display_name"]) print("class and type = ", loc_dict["class"], loc_dict["type"]) url = f"https://www.google.com/maps/search/?api=1&query={location.latitude, location.longitude}" import webbrowser webbrowser.open(url) main()
上のプログラムを実行すると、
Lat, long = 35.675886399999996 139.74505141191034 full address = 国会議事堂, 1, 国道246号, 永田町1, 永田町, 千代田区, 100-0014, 日本 (Japan) Lat, long = 35.675886399999996 139.74505141191034 full address = 国会議事堂, 1, 国道246号, 永田町1, 永田町, 千代田区, 100-0014, 日本 (Japan) class and type = office government
と表示され、ブラウザで国会議事堂のGoogleMapが開くと思います。
ほかのライブラリ
他にも数種類GeoCodingをするPythonライブラリがあるみたいです。
GeoCoder
$ pip install geocoder
でgeocoderを入れます。
import geocoder # 下のコードはGoogleAPIの登録が必須になってから動かなくなっている # g = geocoder.google('Mountain View, CA') # print(g.latlng) location = '日本 国会議事堂' ret = geocoder.osm(location, timeout=5.0) print(ret.latlng) # 出力結果:[35.675886399999996, 139.74505141191034]