@thi.ng/vectors
Version:
Optimized 2d/3d/4d and arbitrary length vector operations, support for memory mapping/layouts
25 lines (24 loc) • 712 B
JavaScript
import { radians2 } from "./radians.js";
const distHaversineLatLon = (a, b, r = 6371) => {
a = radians2([], a);
b = radians2([], b);
return __dist(a[0], a[1], b[0], b[1], r);
};
const distHaversineLonLat = (a, b, r = 6371) => {
a = radians2([], a);
b = radians2([], b);
return __dist(a[1], a[0], b[1], b[0], r);
};
const distHaversine = distHaversineLonLat;
const { cos } = Math;
const __dist = (lat1, lon1, lat2, lon2, r) => {
const dlat = 0.5 - cos(lat2 - lat1) * 0.5;
const dlon = (1 - cos(lon2 - lon1)) * 0.5;
const combined = dlat + cos(lat1) * cos(lat2) * dlon;
return 2 * r * Math.asin(Math.sqrt(combined));
};
export {
distHaversine,
distHaversineLatLon,
distHaversineLonLat
};