Pythonで現在位置(緯度・経度)を取得し、地名や住所情報を得る方法は複数存在します。この記事では、代表的な手法とその実装例を紹介します。
Pythonで現在位置を取得するには、以下のようなアプローチが考えられます。
Windows 10以降では、OS標準の位置情報APIをPythonから利用できます。winsdk
ライブラリを使うことで、PCの現在地(緯度・経度)を取得できます。
サンプルコード
import json
import asyncio
import winsdk.windows.devices.geolocation as wdg
import requests
async def getCoodinates():
locator = wdg.Geolocator()
pos = await locator.get_geoposition_async()
return [pos.coordinate.latitude, pos.coordinate.longitude]
def getLocation():
try:
return asyncio.run(getCoodinates())
except Exception as e:
print(e)
if __name__ == '__main__':
lat, lng = getLocation()
print(f'{lat:.3f} {lng:.3f} by Windows')
url = f'https://geoapi.heartrails.com/api/json?method=searchByGeoLocation&x={lng}&y={lat}'
r = requests.get(url)
loc = json.loads(r.content.decode('utf-8'))['response']['location']
print(f"{float(loc['y']):.3f} {float(loc['x']):.3f} {loc['prefecture']}{loc['city']}{loc['town']}")
ポイント
winsdk
をインストールして利用PCやサーバーのグローバルIPアドレスから、おおよその位置情報を取得する方法もあります。精度は端末やネットワーク環境に依存しますが、簡単に導入できます。
実装例(requestsライブラリを利用)
import requests
response = requests.get("https://ipinfo.io/json")
data = response.json()
print(f"IP: {data['ip']}")
print(f"City: {data['city']}")
print(f"Region: {data['region']}")
print(f"Country: {data['country']}")
print(f"Location: {data['loc']}") # '緯度,経度'形式
Google Maps Geocoding APIを使うことで、より詳細な住所情報や逆ジオコーディングが可能です。Python用のラッパーライブラリgeolocation-python
も存在します。
使い方の流れ
pip install geolocation-python
でライブラリをインストールgeopy
は、OpenStreetMap(Nominatim)やGoogle Geocoding APIなど、複数のジオコーディングサービスを利用できるPythonライブラリです。
サンプルコード
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="your_app_name")
location = geolocator.reverse("35.6895,139.6917") # 東京の緯度経度
print(location.address)
print((location.latitude, location.longitude))
pip install geopy
で簡単に導入可能Pythonで現在位置を取得するには、利用環境や目的に合わせて複数の方法があります。WindowsならOSのAPI、WebアプリやサーバーならIPベース、より高精度ならGoogle Maps APIやgeopyの活用が効果的です。用途に応じて最適な方法を選択しましょう。