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 = "*"
fastapi = "*"
pydantic = "*"
geopy = "*"
shapely = "*"
scipy = "*"
osmpythontools = "*"

View File

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

View File

@ -22,8 +22,7 @@ class Trip(BaseModel):
# Store the trip in the cache
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, noreply=False)
cache_client.set_many({f"landmark_{landmark.uuid}": landmark for landmark in landmarks}, expire=3600)
# is equivalent to:
# for landmark in landmarks:
# cache_client.set(f"landmark_{landmark.uuid}", landmark, expire=3600)

View File

@ -1,5 +1,5 @@
import yaml
from math import sin, cos, sqrt, atan2, radians
from geopy.distance import geodesic
import constants
@ -8,7 +8,6 @@ with constants.OPTIMIZER_PARAMETERS_PATH.open('r') as f:
DETOUR_FACTOR = parameters['detour_factor']
AVERAGE_WALKING_SPEED = parameters['average_walking_speed']
EARTH_RADIUS_KM = 6373
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
else:
# Compute the distance in km along the surface of the Earth
# (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])
dist = geodesic(p1, p2).kilometers
dlon = lon2 - lon1
dlat = lat2 - lat1
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
# Consider the detour factor for average cityto deterline walking distance (in km)
walk_dist = dist*DETOUR_FACTOR
# 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)

View File

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