/ backend / src / utils / geography.ts
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);