Files
nearxos 808fbf5c7c Refactor golden image handling in backup upload process</message>
<message>Update the _set_golden_from_path function to improve the handling of existing golden image files. Replace the existing unlink logic with a more robust method that safely removes files or broken symlinks using the missing_ok parameter. This change enhances the reliability of the backup upload process by ensuring that stale references are properly cleared before setting a new golden image path.
2026-02-24 00:19:40 +02:00

60 lines
1.6 KiB
Python

#!/usr/bin/env python3
"""
Distance calculation utilities using Haversine formula
"""
import math
from typing import Optional
def haversine_distance(
lat1: float, lon1: float, lat2: float, lon2: float
) -> Optional[float]:
"""
Calculate the great circle distance between two points on Earth using Haversine formula.
Args:
lat1: Latitude of first point in degrees
lon1: Longitude of first point in degrees
lat2: Latitude of second point in degrees
lon2: Longitude of second point in degrees
Returns:
Distance in meters, or None if calculation fails
"""
try:
# Validate inputs
if not all(isinstance(x, (int, float)) for x in [lat1, lon1, lat2, lon2]):
return None
# Check if coordinates are valid
if not (-90 <= lat1 <= 90) or not (-90 <= lat2 <= 90):
return None
if not (-180 <= lon1 <= 180) or not (-180 <= lon2 <= 180):
return None
# Earth's radius in meters
R = 6371000
# Convert degrees to radians
phi1 = math.radians(lat1)
phi2 = math.radians(lat2)
delta_phi = math.radians(lat2 - lat1)
delta_lambda = math.radians(lon2 - lon1)
# Haversine formula
a = (
math.sin(delta_phi / 2) ** 2
+ math.cos(phi1) * math.cos(phi2) * math.sin(delta_lambda / 2) ** 2
)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
# Distance in meters
distance = R * c
return distance
except (ValueError, TypeError, OverflowError):
return None