目的
緯度経度を入力に、都道府県を出力とする関数を作ること
方法
二つのメソッドを使う。
- Geopyのreverseという緯度経度を入力に都道府県コードを出力するメソッド
- pycountryのsubdivisions.getというISO 3166-2:JP都道府県コードから都道府県名を出力するメソッド
以上2点を組み合わせて
インプット:緯度経度
アウトプット:都道府県名
の関数を作成する。
準備
geopyとpycountryをインストールしましょう。
pip install geopy
pip install pycountry
動いた環境のpythonのバージョンは3.8.8でした。
コード
user_agent は書き換えてご利用ください。
from geopy.geocoders import Nominatim
import pycountry
geolocator = Nominatim(user_agent = "something")
# 緯度経度から都道府県コードを取得
def get_prefecture_code_from_lat_lon(latitude, longitude, geolocator):
location = geolocator.reverse((latitude,longitude),language = "jp")
if location and location.raw.get("address"):
return location.raw["address"].get("ISO3166-2-lvl4")
return None
# 都道府県コードから都道府県名を取得
def get_subdivision_name(iso_code):
subdivision = pycountry.subdivisions.get(code=iso_code)
if subdivision:
return subdivision.name
return None
latitude = 35.6895 # 例:東京
longitude = 139.6917
prefecture_code = get_prefecture_code_from_lat_lon(latitude, longitude, geolocator)
print(f"都道府県コード = {prefecture_code}")
prefecture = get_subdivision_name(prefecture_code)
print(f"都道府県:{prefecture}")
注意点
geopyのライブラリからの都道府県情報はISO 3166-2:JP コードで取得している。
latitude = 35.6895 # 例:東京
longitude = 139.6917
location = geolocator.reverse((latitude,longitude),language = "jp")
print(location.raw)
とすると、display_name に東京都と書かれており、都道府県情報が入っていることがわかる。
print(location.raw["display_name"])
とすると、カンマ区切りで住所の情報が入っている。ここから都道府県情報を取得することもできなくはないが、ちょっと面倒くさく感じ、ISO 3166-2:JPコードを用いることを検討した。