geography.ts
1 export type Coordinates = [number, number]; 2 3 export const calculateHaversineDistance = ( 4 [lat1, lon1]: Coordinates, 5 [lat2, lon2]: Coordinates 6 ): number => { 7 const R = 6371; // Radius of the Earth in kilometers 8 9 const dLat = degreesToRadians(lat2 - lat1); 10 const dLon = degreesToRadians(lon2 - lon1); 11 12 const a = 13 Math.sin(dLat / 2) * Math.sin(dLat / 2) + 14 Math.cos(degreesToRadians(lat1)) * 15 Math.cos(degreesToRadians(lat2)) * 16 Math.sin(dLon / 2) * 17 Math.sin(dLon / 2); 18 19 const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 20 const distance = R * c; // Distance in kilometers 21 return distance; 22 }; 23 24 const degreesToRadians = (degrees: number): number => degrees * (Math.PI / 180);