Corin1998's picture
Update services/osrm.py
062eb58 verified
from __future__ import annotations
import requests
from typing import List, Tuple
OSRM = "https://router.project-osrm.org" # Best-effort public OSRM
def route_polyline(coords: List[Tuple[float, float]], profile: str = "driving"):
# coords: [(lon, lat), ...]; profile: driving | foot | bike
locs = ";".join([f"{lon},{lat}" for lon, lat in coords])
url = f"{OSRM}/route/v1/{profile}/{locs}"
params = {"overview": "full", "geometries": "geojson"}
r = requests.get(url, params=params, timeout=30)
r.raise_for_status()
j = r.json()
if not j.get("routes"):
return None
return j["routes"][0]
def distance_matrix(coords: List[Tuple[float, float]], profile: str = "driving"):
locs = ";".join([f"{lon},{lat}" for lon, lat in coords])
url = f"{OSRM}/table/v1/{profile}/{locs}"
params = {"annotations": "duration,distance"}
r = requests.get(url, params=params, timeout=30)
r.raise_for_status()
j = r.json()
return j["durations"], j["distances"]