Compare commits

..

No commits in common. "40edd923c3836f34c94de25f47b45940e71c0338" and "c20ebf3d639a2810f49fc221163abab9e7fefd23" have entirely different histories.

6 changed files with 20 additions and 32 deletions

View File

@ -9,6 +9,7 @@ name = "pypi"
numpy = "*" numpy = "*"
fastapi = "*" fastapi = "*"
pydantic = "*" pydantic = "*"
geopy = "*"
shapely = "*" shapely = "*"
scipy = "*" scipy = "*"
osmpythontools = "*" osmpythontools = "*"

View File

@ -21,8 +21,8 @@ if constants.MEMCACHED_HOST_PATH is None:
else: else:
client = Client( client = Client(
constants.MEMCACHED_HOST_PATH, constants.MEMCACHED_HOST_PATH,
timeout = 1, timeout=1,
allow_unicode_keys = True, allow_unicode_keys=True,
encoding = 'utf-8', encoding='utf-8',
serde = serde.pickle_serde serde=serde.pickle_serde
) )

View File

@ -22,8 +22,7 @@ class Trip(BaseModel):
# Store the trip in the cache # Store the trip in the cache
cache_client.set(f"trip_{trip.uuid}", trip) cache_client.set(f"trip_{trip.uuid}", trip)
# make sure to await the result (noreply=False). Otherwise the cache might not be inplace when the trip is actually requested cache_client.set_many({f"landmark_{landmark.uuid}": landmark for landmark in landmarks}, expire=3600)
cache_client.set_many({f"landmark_{landmark.uuid}": landmark for landmark in landmarks}, expire=3600, noreply=False)
# is equivalent to: # is equivalent to:
# for landmark in landmarks: # for landmark in landmarks:
# cache_client.set(f"landmark_{landmark.uuid}", landmark, expire=3600) # cache_client.set(f"landmark_{landmark.uuid}", landmark, expire=3600)

View File

@ -1,5 +1,5 @@
import yaml import yaml
from math import sin, cos, sqrt, atan2, radians from geopy.distance import geodesic
import constants import constants
@ -8,7 +8,6 @@ with constants.OPTIMIZER_PARAMETERS_PATH.open('r') as f:
DETOUR_FACTOR = parameters['detour_factor'] DETOUR_FACTOR = parameters['detour_factor']
AVERAGE_WALKING_SPEED = parameters['average_walking_speed'] AVERAGE_WALKING_SPEED = parameters['average_walking_speed']
EARTH_RADIUS_KM = 6373
def get_time(p1: tuple[float, float], p2: tuple[float, float]) -> int: def get_time(p1: tuple[float, float], p2: tuple[float, float]) -> int:
""" """
@ -23,28 +22,16 @@ def get_time(p1: tuple[float, float], p2: tuple[float, float]) -> int:
""" """
if p1 == p2: # Compute the straight-line distance in km
if p1 == p2 :
return 0 return 0
else: else:
# Compute the distance in km along the surface of the Earth dist = geodesic(p1, p2).kilometers
# (assume spherical Earth)
# this is the haversine formula, stolen from stackoverflow
# in order to not use any external libraries
lat1, lon1 = radians(p1[0]), radians(p1[1])
lat2, lon2 = radians(p2[0]), radians(p2[1])
dlon = lon2 - lon1 # Consider the detour factor for average cityto deterline walking distance (in km)
dlat = lat2 - lat1 walk_dist = dist*DETOUR_FACTOR
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
distance = EARTH_RADIUS_KM * c
# Consider the detour factor for average an average city
walk_distance = distance * DETOUR_FACTOR
# Time to walk this distance (in minutes) # Time to walk this distance (in minutes)
walk_time = walk_distance / AVERAGE_WALKING_SPEED * 60 walk_time = walk_dist/AVERAGE_WALKING_SPEED*60
return round(walk_time) return round(walk_time)

View File

@ -3,6 +3,7 @@ import numpy as np
from scipy.optimize import linprog from scipy.optimize import linprog
from collections import defaultdict, deque from collections import defaultdict, deque
from geopy.distance import geodesic
from structs.landmark import Landmark from structs.landmark import Landmark
from .get_time_separation import get_time from .get_time_separation import get_time