Update services/osrm.py
Browse files- services/osrm.py +10 -9
services/osrm.py
CHANGED
|
@@ -2,24 +2,25 @@ from __future__ import annotations
|
|
| 2 |
import requests
|
| 3 |
from typing import List, Tuple
|
| 4 |
|
| 5 |
-
OSRM = "https://router.project-osrm.org"
|
| 6 |
|
| 7 |
-
def route_polyline(coords: List[Tuple[float, float]]):
|
| 8 |
-
# coords:[(
|
| 9 |
locs = ";".join([f"{lon},{lat}" for lon, lat in coords])
|
| 10 |
-
url = f"{OSRM}/route/v1/
|
| 11 |
-
params = {"overview":"full","geometries":"geojson"}
|
| 12 |
r = requests.get(url, params=params, timeout=30)
|
|
|
|
| 13 |
j = r.json()
|
| 14 |
if not j.get("routes"):
|
| 15 |
return None
|
| 16 |
return j["routes"][0]
|
| 17 |
|
| 18 |
-
def distance_matrix(coords: List[Tuple[float, float]]):
|
| 19 |
locs = ";".join([f"{lon},{lat}" for lon, lat in coords])
|
| 20 |
-
url = f"{OSRM}/table/v1/
|
| 21 |
-
params = {"annotations":"duration
|
| 22 |
-
r = requests.get(url, params=params
|
| 23 |
r.raise_for_status()
|
| 24 |
j = r.json()
|
| 25 |
return j["durations"], j["distances"]
|
|
|
|
| 2 |
import requests
|
| 3 |
from typing import List, Tuple
|
| 4 |
|
| 5 |
+
OSRM = "https://router.project-osrm.org" # Best-effort public OSRM
|
| 6 |
|
| 7 |
+
def route_polyline(coords: List[Tuple[float, float]], profile: str = "driving"):
|
| 8 |
+
# coords: [(lon, lat), ...]; profile: driving | foot | bike
|
| 9 |
locs = ";".join([f"{lon},{lat}" for lon, lat in coords])
|
| 10 |
+
url = f"{OSRM}/route/v1/{profile}/{locs}"
|
| 11 |
+
params = {"overview": "full", "geometries": "geojson"}
|
| 12 |
r = requests.get(url, params=params, timeout=30)
|
| 13 |
+
r.raise_for_status()
|
| 14 |
j = r.json()
|
| 15 |
if not j.get("routes"):
|
| 16 |
return None
|
| 17 |
return j["routes"][0]
|
| 18 |
|
| 19 |
+
def distance_matrix(coords: List[Tuple[float, float]], profile: str = "driving"):
|
| 20 |
locs = ";".join([f"{lon},{lat}" for lon, lat in coords])
|
| 21 |
+
url = f"{OSRM}/table/v1/{profile}/{locs}"
|
| 22 |
+
params = {"annotations": "duration,distance"}
|
| 23 |
+
r = requests.get(url, params=params, timeout=30)
|
| 24 |
r.raise_for_status()
|
| 25 |
j = r.json()
|
| 26 |
return j["durations"], j["distances"]
|