葵は地図を表示する上でまず必要なのはなんだと思う?
それはやっぱり地図を表示する位置じゃない?緯度経度とか
そうだね!
でも、自分で調べたい緯度経度を入力するのは現実的じゃないでしょ?
確かに...!!普段自分がいてる場所の緯度経度とか分からないもんね
そこでこのページでは、地名や住所を入れると緯度経度を返してくれるAPIとその使い方について紹介するよ
おおー!ちゃんとそういうAPIもあるんだ!
この機能もOpenStreetMapにはあって、Nominatim APIっていうのを使って地名や住所から緯度経度を取得できるんよ
ちなみに、地名や住所から緯度経度を取得することを「ジオコーディング」って言うよ
なんかカッコいい響き...!!
んで、ジオコーディングする「Nominatim API」を使うのに便利な外部ライブラリが「geopy」だよ
pip install geopy
インストール完了!
じゃあ、まずは試しに下のプログラムを動かしてみよう!
from geopy.geocoders import Nominatim
location_name = "スカイツリー" # ジオコーディングする地名を指定
geolocator = Nominatim(user_agent="my_geocoding_app")
geocoder_result = geolocator.geocode(location_name, timeout=5.0)
print(f"緯度: {geocoder_result.latitude}, 経度: {geocoder_result.longitude}")
ここではlocation_nameに「スカイツリー」を指定してるけど、好きな地名を指定してみて!
おおー、緯度経度が表示された!
ちなみに、取得できた緯度経度をGoogleマップで確認すると...
ちゃんとスカイツリーが出てきた!
あと、一応説明しておくと、「Nominatim()」の中にある「user-agent」は、APIをリクエストする時に、誰が利用しているかを識別するための識別子になるんよ
ここに入れる内容は別に何でも良いんだけど、本格的に運用する場合は自分のアプリ名とかメールアドレスを入力した方がマナーとしては良いかな
もしちゃんと入れなかったら良くないことはあるの?
練習でちょっと使う程度なら問題ないと思うけど、場合によってはアクセスをブロックされる可能性があるから気を付けてね
わかった!
じゃあ最後に、これを関数にして地図アプリですぐに使えるようにしておこう
from geopy.geocoders import Nominatim
# 土地名から緯度経度の取得
def get_coordinates(address):
geolocator = Nominatim(user_agent="my_geocoding_app")
geocoder_result = geolocator.geocode(address, timeout=5.0)
try:
return float(geocoder_result.latitude), float(geocoder_result.longitude)
except Exception as e:
print(f"接続エラー: {e}")
return None, None
print(get_coordinates("スカイツリー"))
