backend/src/utils/geography.ts (view raw)
1export type Coordinates = [number, number];
2
3export 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
24const degreesToRadians = (degrees: number): number => degrees * (Math.PI / 180);