第3章 ジオコーディング
1 緯度経度の取得
地図で場所を示すのは緯度と経度です。緯度と経度を扱うプログラミングをジオコーディングといいます。そのためのライブラリがgeocoderとgeopyです。
場所の名前から緯度経度を取得してみます。map1.ipynbに以下を記述します。
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="geoapi")
location = geolocator.geocode("熊本市役所")
print("緯度:",location.latitude)
print("経度:",location.longitude)
NominatimはOpenStreetMapにアクセスし、緯度と経度を取得します。ただし、アクセス数が多い場合、取得出来ない場合があります。
国土地理院のWeb APIを利用すると住所から緯度経度への変換が可能です。
import requests
url = "https://msearch.gsi.go.jp/address-search/AddressSearch?q="
adr = "熊本県熊本市中央区手取本町1-1"
response = requests.get(url + adr)
res = response.json()
res
取得したJSON情報にはさまざまな情報が含まれているため、緯度経度だけを出すには以下のようにします。
res[0]["geometry"]["coordinates"]
施設の名前から検索してみます。
import requests
url = "https://msearch.gsi.go.jp/address-search/AddressSearch?q="
name = "熊本市役所"
response = requests.get(url + name)
response.json()
2 距離取得
geopyを使うと緯度経度を使った計算が出来ます。今回は二地点間の距離を調べてみます。geopyのdistanceを使用します。
from geopy import distance
# 熊本市役所の緯度経度(逆順で緯度を先にする)
pos1 = [130.708023, 32.803417][::-1]
# 鶴屋の緯度経度
pos2 = [130.710587, 32.802784][::-1]
# 距離
dist = distance.distance(pos1, pos2).km
print(dist, 'Km')
distanceで2つの場所の緯度経度を指定します。そして、kmとすることで、キロメートル単位で取得出来ます。 m とするとメートル単位で取得出来ます。