🗾

Windows の位置情報 API を利用して Python でおおよその現在地を取得する

2024/09/21に公開

2024/09/21 時点での情報です

概要

  • Windows SDK python binding winsdk で緯度経度を取得
  • 無料の reverse geocoding API サービス HeartRails Geo API

を組み合わせて地名を取得します。

https://github.com/pywinrt/python-winsdk

サンプルソース

sample.py
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'][0]
    print(f"{float(loc['y']):.3f} {float(loc['x']):.3f} {loc['prefecture']}{loc['city']}{loc['town']}")

実行例

PS C:\Users\sharl\Downloads\sample> python -m venv .venv
PS C:\Users\sharl\Downloads\sample> .\.venv\Scripts\activate
(.venv) PS C:\Users\sharl\Downloads\sample> pip install winsdk requests
(.venv) PS C:\Users\sharl\Downloads\sample> python .\sample.py
42.923 143.193 by Windows
42.924 143.196 北海道帯広市美栄町

Enjoy!!

Discussion