タイトル画像
琴葉茜

葵は地図を表示する上でまず必要なのはなんだと思う?

琴葉葵

それはやっぱり地図を表示する位置じゃない?緯度経度とか

琴葉茜

そうだね!
でも、自分で調べたい緯度経度を入力するのは現実的じゃないでしょ?

琴葉葵

確かに...!!普段自分がいてる場所の緯度経度とか分からないもんね

琴葉茜

そこでこのページでは、地名や住所を入れると緯度経度を返してくれる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に「スカイツリー」を指定してるけど、好きな地名を指定してみて!

解説画像1
琴葉葵

おおー、緯度経度が表示された!

琴葉茜

ちなみに、取得できた緯度経度をGoogleマップで確認すると...

解説画像1
琴葉葵

ちゃんとスカイツリーが出てきた!

琴葉茜

あと、一応説明しておくと、「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("スカイツリー"))