samaan / utils /geo_utils.py
Copilot Sync Bot
Sync backend from main branch
26c9046
raw
history blame contribute delete
632 Bytes
from __future__ import annotations
from math import radians, sin, cos, sqrt, atan2
from typing import Optional, Tuple
def haversine_km(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
r = 6371.0
dlat = radians(lat2 - lat1)
dlon = radians(lon2 - lon1)
a = sin(dlat / 2) ** 2 + cos(radians(lat1)) * cos(radians(lat2)) * sin(dlon / 2) ** 2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
return r * c
def normalize_latlng(lat: Optional[float], lng: Optional[float]) -> Tuple[Optional[float], Optional[float]]:
return (float(lat) if lat is not None else None, float(lng) if lng is not None else None)