Better landmark finding #27
| @@ -9,7 +9,6 @@ name = "pypi" | |||||||
| numpy = "*" | numpy = "*" | ||||||
| fastapi = "*" | fastapi = "*" | ||||||
| pydantic = "*" | pydantic = "*" | ||||||
| geopy = "*" |  | ||||||
| shapely = "*" | shapely = "*" | ||||||
| scipy = "*" | scipy = "*" | ||||||
| osmpythontools = "*" | osmpythontools = "*" | ||||||
|   | |||||||
| @@ -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 | ||||||
|     ) |     ) | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import yaml | import yaml | ||||||
| from geopy.distance import geodesic | from math import sin, cos, sqrt, atan2, radians | ||||||
|  |  | ||||||
| import constants | import constants | ||||||
|  |  | ||||||
| @@ -8,6 +8,7 @@ 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: | ||||||
|     """ |     """ | ||||||
| @@ -22,16 +23,28 @@ def get_time(p1: tuple[float, float], p2: tuple[float, float]) -> int: | |||||||
|     """ |     """ | ||||||
|  |  | ||||||
|  |  | ||||||
|     # Compute the straight-line distance in km |     if p1 == p2: | ||||||
|     if p1 == p2 : |  | ||||||
|         return 0 |         return 0 | ||||||
|     else: |     else: | ||||||
|         dist = geodesic(p1, p2).kilometers |         # 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]) | ||||||
|  |  | ||||||
|     # Consider the detour factor for average cityto deterline walking distance (in km) |         dlon = lon2 - lon1 | ||||||
|     walk_dist = dist*DETOUR_FACTOR |         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 | ||||||
|  |  | ||||||
|     # Time to walk this distance (in minutes) |     # Time to walk this distance (in minutes) | ||||||
|     walk_time = walk_dist/AVERAGE_WALKING_SPEED*60 |     walk_time = walk_distance / AVERAGE_WALKING_SPEED * 60 | ||||||
|  |  | ||||||
|     return round(walk_time) |     return round(walk_time) | ||||||
|   | |||||||
| @@ -3,7 +3,6 @@ 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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user