🗾
Windows の位置情報 API を利用して Python でおおよその現在地を取得する
2024/09/21 時点での情報です
概要
- Windows SDK python binding
winsdk
で緯度経度を取得 - 無料の reverse geocoding API サービス HeartRails Geo API
を組み合わせて地名を取得します。
サンプルソース
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