| from __future__ import annotations |
| import requests |
| from typing import List, Tuple |
|
|
| OSRM = "https://router.project-osrm.org" |
|
|
| def route_polyline(coords: List[Tuple[float, float]], profile: str = "driving"): |
| |
| 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"] |
|
|