Pythonで現在位置を取得する方法まとめ

この記事は約5分で読めます。
スポンサーリンク

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も存在します。

使い方の流れ

  1. Google Cloud PlatformでAPIキーを取得
  2. pip install geolocation-pythonでライブラリをインストール
  3. 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の活用が効果的です。用途に応じて最適な方法を選択しましょう。

コメント

タイトルとURLをコピーしました