28 lines
954 B
Python
28 lines
954 B
Python
from typing import List, Dict
|
|
import aiohttp
|
|
|
|
|
|
class ElevationAPI:
|
|
ELEVATION_ENDPOINT = "https://api.open-elevation.com/api/v1/lookup"
|
|
|
|
def get_request(self, points: List[Dict[str, float]]):
|
|
return {"locations": [{"latitude": point['lat'], "longitude": point['lng']} for point in points]}
|
|
|
|
async def call_api(self, points: List[Dict[str, float]]):
|
|
async with aiohttp.ClientSession() as session:
|
|
async with session.post(self.ELEVATION_ENDPOINT, json=self.get_request(points)) as resp:
|
|
resp.raise_for_status()
|
|
return await resp.json()
|
|
|
|
async def get_elevation_for_points(self, points: List[Dict[str, float]]) -> List[dict]:
|
|
response = await self.call_api(points)
|
|
|
|
return [{
|
|
"lat": loc['latitude'],
|
|
"lng": loc['longitude'],
|
|
"elevation": loc['elevation']
|
|
} for loc in response['results']]
|
|
|
|
|
|
elevation_api = ElevationAPI()
|