@mcabreradev/filter
Version:
A powerful, SQL-like array filtering library for TypeScript and JavaScript with advanced pattern matching, MongoDB-style operators, deep object comparison, and zero dependencies
29 lines (28 loc) • 988 B
JavaScript
const EARTH_RADIUS_METERS = 6371000;
export function calculateDistance(p1, p2) {
const toRad = (deg) => (deg * Math.PI) / 180;
const lat1 = toRad(p1.lat);
const lat2 = toRad(p2.lat);
const deltaLat = toRad(p2.lat - p1.lat);
let lngDiff = p2.lng - p1.lng;
if (lngDiff > 180)
lngDiff -= 360;
if (lngDiff < -180)
lngDiff += 360;
const deltaLng = toRad(lngDiff);
const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +
Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLng / 2) * Math.sin(deltaLng / 2);
const centralAngle = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return EARTH_RADIUS_METERS * centralAngle;
}
export function isValidGeoPoint(point) {
if (!point || typeof point !== 'object')
return false;
const p = point;
return (typeof p.lat === 'number' &&
typeof p.lng === 'number' &&
p.lat >= -90 &&
p.lat <= 90 &&
p.lng >= -180 &&
p.lng <= 180);
}