"""Distancia en km entre dos puntos lon/lat usando la formula de Haversine."""

import math


def haversine_km(lon1: float, lat1: float, lon2: float, lat2: float) -> float:
    """Calcula la distancia en kilometros entre dos puntos dados en grados decimales.

    Args:
        lon1: longitud del primer punto en grados.
        lat1: latitud del primer punto en grados.
        lon2: longitud del segundo punto en grados.
        lat2: latitud del segundo punto en grados.

    Returns:
        Distancia en kilometros entre los dos puntos.
    """
    r = 6371.0
    phi1 = math.radians(lat1)
    phi2 = math.radians(lat2)
    dphi = math.radians(lat2 - lat1)
    dlambda = math.radians(lon2 - lon1)
    a = math.sin(dphi / 2) ** 2 + math.cos(phi1) * math.cos(phi2) * math.sin(dlambda / 2) ** 2
    return 2 * r * math.atan2(math.sqrt(a), math.sqrt(1 - a))
