geo-distances
Version:
A geographical distance calculator. Calculates distance between two points using haversine formula.
84 lines (69 loc) • 1.91 kB
JavaScript
;
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();