internal.geolocation.distance
Distance calculation modules.
1"""Distance calculation modules.""" 2 3from geopy.distance import geodesic # type: ignore[import-untyped] 4from pydantic import BaseModel 5 6from .types import LocationModel 7 8 9class DistanceBoxModel(BaseModel): 10 """Safe distance box for database query.""" 11 12 lat_max: float 13 lat_min: float 14 lon_max: float 15 lon_min: float 16 17 18def dist_safe_box(loc: LocationModel, dist: int) -> DistanceBoxModel: 19 """Calculate safe box for database query. 20 21 Args: 22 loc: start point coordinates 23 dist: distance from the point 24 25 Returns: 26 safe box borders 27 """ 28 loc_dist = geodesic(dist) 29 loc_point = tuple(loc.model_dump().values()) 30 return DistanceBoxModel( 31 lat_max=loc_dist.destination(loc_point, 0).latitude, 32 lat_min=loc_dist.destination(loc_point, 180).latitude, 33 lon_max=loc_dist.destination(loc_point, 90).longitude, 34 lon_min=loc_dist.destination(loc_point, 270).longitude, 35 ) 36 37 38def get_distance(from_loc: LocationModel, to_loc: LocationModel) -> float: 39 """Geographical distance between two points. 40 41 Args: 42 from_loc: from point 43 to_loc: to point 44 45 Returns: 46 distance between points in kilometers 47 48 Raises: 49 ValueError: if failed to get distance 50 """ 51 dist = geodesic( 52 tuple(from_loc.model_dump().values()), tuple(to_loc.model_dump().values()) 53 ) 54 if type(dist) is not geodesic: 55 raise ValueError("failed to calculate distance") 56 return float(dist.km)
class
DistanceBoxModel(pydantic.main.BaseModel):
10class DistanceBoxModel(BaseModel): 11 """Safe distance box for database query.""" 12 13 lat_max: float 14 lat_min: float 15 lon_max: float 16 lon_min: float
Safe distance box for database query.
19def dist_safe_box(loc: LocationModel, dist: int) -> DistanceBoxModel: 20 """Calculate safe box for database query. 21 22 Args: 23 loc: start point coordinates 24 dist: distance from the point 25 26 Returns: 27 safe box borders 28 """ 29 loc_dist = geodesic(dist) 30 loc_point = tuple(loc.model_dump().values()) 31 return DistanceBoxModel( 32 lat_max=loc_dist.destination(loc_point, 0).latitude, 33 lat_min=loc_dist.destination(loc_point, 180).latitude, 34 lon_max=loc_dist.destination(loc_point, 90).longitude, 35 lon_min=loc_dist.destination(loc_point, 270).longitude, 36 )
Calculate safe box for database query.
Arguments:
- loc: start point coordinates
- dist: distance from the point
Returns:
safe box borders
def
get_distance( from_loc: internal.geolocation.types.LocationModel, to_loc: internal.geolocation.types.LocationModel) -> float:
39def get_distance(from_loc: LocationModel, to_loc: LocationModel) -> float: 40 """Geographical distance between two points. 41 42 Args: 43 from_loc: from point 44 to_loc: to point 45 46 Returns: 47 distance between points in kilometers 48 49 Raises: 50 ValueError: if failed to get distance 51 """ 52 dist = geodesic( 53 tuple(from_loc.model_dump().values()), tuple(to_loc.model_dump().values()) 54 ) 55 if type(dist) is not geodesic: 56 raise ValueError("failed to calculate distance") 57 return float(dist.km)
Geographical distance between two points.
Arguments:
- from_loc: from point
- to_loc: to point
Returns:
distance between points in kilometers
Raises:
- ValueError: if failed to get distance