コンテンツにスキップ

第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 とするとメートル単位で取得出来ます。