export function calculateBearing( lat1: number, lon1: number, lat2: number, lon2: number ): number { const φ1 = (lat1 * Math.PI) / 180; // Convert to radians const φ2 = (lat2 * Math.PI) / 180; const Δλ = ((lon2 - lon1) * Math.PI) / 180; // Bearing formula const y = Math.sin(Δλ) * Math.cos(φ2); const x = Math.cos(φ1) * Math.sin(φ2) - Math.sin(φ1) * Math.cos(φ2) * Math.cos(Δλ); let θ = Math.atan2(y, x); θ = (θ * 180) / Math.PI; // Convert back to degrees return (θ + 360) % 360; // Normalize to 0-360° } export function calculateDistance( lat1: number, lon1: number, lat2: number, lon2: number ): number { const R = 6371e3; // Earth radius in meters const φ1 = (lat1 * Math.PI) / 180; const φ2 = (lat2 * Math.PI) / 180; const Δφ = ((lat2 - lat1) * Math.PI) / 180; const Δλ = ((lon2 - lon1) * Math.PI) / 180; const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) + Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) * Math.sin(Δλ / 2); const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); return R * c; // Distance in meters }