UNPKG

geo-distances

Version:

A geographical distance calculator. Calculates distance between two points using haversine formula.

84 lines (69 loc) 1.91 kB
'use strict'; let radiusUnits = { 'feet': 20908800, 'yards': 6969600, 'miles': 3960, 'mi': 3960, 'kilometers': 6371, 'km': 6371, 'meters': 6371000 }; class Utils { /** * Return distance between two co-ordinates point * * @param {Object} lat1 Point one Latitude * @param {Object} lon1 Point one Longitude * @param {Object} lat2 Point two Latitude * @param {Object} lon2 Point two Longitude * @returns {number} */ distance(lat1, lon1, lat2, lon2, unit) { let RaE = getEarthRadius(unit); let dLat = degreeToRadian(lat2 - lat1); let dLon = degreeToRadian(lon2 - lon1); return distance_formula(RaE, dLat, dLon, lat1, lat2); } } /** * * @param {number} degree degree * @returns {number} */ let degreeToRadian = (degree) => { return degree * (Math.PI / 180); } /** * Haversine formula * * @param {number} RaE Radius of Earth * @param {number} dLat difference between Latitude * @param {number} dLone difference between longitude * @param {number} lat1 point one lattitude * @param {number} lat2 point two lattitude * @returns {number} */ let distance_formula = (RaE, dLat, dLon, lat1, lat2) => { let calc1 = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(degreeToRadian(lat1)) * Math.cos(degreeToRadian(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2) let calc2 = 2 * Math.atan2(Math.sqrt(calc1), Math.sqrt(1 - calc1)) return RaE * calc2 } /** * Return Earth Radius in different units * * @param {String} unit unit of measurement * @returns {number} */ let getEarthRadius = ((unit) => { if (unit == null) { unit = "km"; } unit = unit.toLowerCase(); if (!radiusUnits[unit]) { unit = "km"; } return radiusUnits[unit]; }) module.exports = new Utils();