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