import { MathHelpers } from '@igortrindade/lazyfy' export const getDistanceAndBearing = (lat1: number, lon1: number, lat2: number, lon2: number) => { const R = 6371e3; // metres const φ1 = lat1 * Math.PI / 180; // φ, λ in radians 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)); const distance = MathHelpers.round((R * c), 2); // in metres let bearing = Math.atan2(Math.sin(Δλ) * Math.cos(φ2), Math.cos(φ1) * Math.sin(φ2) - Math.sin(φ1) * Math.cos(φ2) * Math.cos(Δλ)); bearing = MathHelpers.round(((bearing * 180 / Math.PI + 360) % 360), 0) // convert to degrees return { distance, bearing } }