13 lines
507 B
TypeScript
13 lines
507 B
TypeScript
const EARTH_RADIUS_KM = 6371;
|
|
|
|
// Great-circle distance between two WGS84 points (haversine), in km.
|
|
export function haversineKm(lat1: number, lon1: number, lat2: number, lon2: number): number {
|
|
const toRad = (d: number) => (d * Math.PI) / 180;
|
|
const dLat = toRad(lat2 - lat1);
|
|
const dLon = toRad(lon2 - lon1);
|
|
const a =
|
|
Math.sin(dLat / 2) ** 2 +
|
|
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) ** 2;
|
|
return 2 * EARTH_RADIUS_KM * Math.asin(Math.min(1, Math.sqrt(a)));
|
|
}
|