Pythonで現在位置(緯度・経度)を取得し、地名や住所情報を得る方法は複数存在します。この記事では、代表的な手法とその実装例を紹介します。
Pythonで現在位置を取得する主な方法
Pythonで現在位置を取得するには、以下のようなアプローチが考えられます。
- OSの位置情報APIを利用(例:WindowsのGeolocation API)
- IPアドレスから位置情報を推定
- スマートフォンやIoTデバイスのAPIを利用
- サードパーティのジオコーディングAPIを利用
Windowsの位置情報APIを使う方法
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
をインストールして利用- 取得した緯度・経度を無料API(HeartRails Geo APIなど)で地名に変換
- Windowsの「プライバシーとセキュリティ」設定でPythonの位置情報アクセス許可が必要
IPアドレスベースの位置情報取得
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']}") # '緯度,経度'形式
- 他にも「ip-api.com」「ipgeolocation.io」など無料APIが利用可能
- 精度はWi-Fi接続やモバイル回線の方が高い傾向
Google Maps APIを利用した方法
Google Maps Geocoding APIを使うことで、より詳細な住所情報や逆ジオコーディングが可能です。Python用のラッパーライブラリgeolocation-python
も存在します。
使い方の流れ
- Google Cloud PlatformでAPIキーを取得
pip install geolocation-python
でライブラリをインストール- APIキーを使って位置情報取得
geopyライブラリによる逆ジオコーディング
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
で簡単に導入可能- 取得した緯度・経度から住所情報を得られる
注意点とまとめ
- 端末やネットワーク環境によって精度が異なる
- サービスによってはAPIキーや利用制限がある
- プライバシー保護のため、ユーザーの許可が必要な場合がある
まとめ
Pythonで現在位置を取得するには、利用環境や目的に合わせて複数の方法があります。WindowsならOSのAPI、WebアプリやサーバーならIPベース、より高精度ならGoogle Maps APIやgeopyの活用が効果的です。用途に応じて最適な方法を選択しましょう。
コメント