infoalloggi-monorepo/apps/infoalloggi/src/hooks/coordDistance.ts

36 lines
983 B
TypeScript

//This function takes in latitude and longitude of two location and returns the distance between them as the crow flies (in km)
function CoordDistance(lat1: number, lon1: number, lat2: number, lon2: number) {
const R = 6371; // km
const dLat = toRad(lat2 - lat1);
const dLon = toRad(lon2 - lon1);
const lat1_calc = toRad(lat1);
const lat2_calc = toRad(lat2);
const a =
Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.sin(dLon / 2) *
Math.sin(dLon / 2) *
Math.cos(lat1_calc) *
Math.cos(lat2_calc);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const d = R * c;
return d;
}
// Converts numeric degrees to radians
function toRad(value: number) {
return (value * Math.PI) / 180;
}
export function handleDistanceCoord(
lat1: number,
lon1: number,
lat2: number,
lon2: number,
) {
const distance = CoordDistance(lat1, lon1, lat2, lon2);
if (distance < 1) {
return `~${Math.round(distance * 1000)} m`;
}
return `~${Math.round(distance)} km`;
}