Skip to content

Instantly share code, notes, and snippets.

@buddyeorl
Created October 8, 2020 19:14
Show Gist options
  • Save buddyeorl/81cfac983bb52a50bd432d94a08d0108 to your computer and use it in GitHub Desktop.
Save buddyeorl/81cfac983bb52a50bd432d94a08d0108 to your computer and use it in GitHub Desktop.
Using zipcode lat and lon to calculate distance between two points
// using geometry to calculate distance between to points by latitude and longitude,
//units are of type enum, 'M' for distance in miles, 'K' for distance in kilometers or 'N' in Nautic Miles
module.exports.calculateDistance = (a, b, unit = 'M') => {
//if points received are not valid
if (!a || !b || !a.lat || !a.lon || !b.lat || !b.lon) {
return 0
}
let lat1 = a.lat;
let lon1 = a.lon;
let lat2 = b.lat;
let lon2 = b.lon
if ((lat1 == lat2) && (lon1 == lon2)) {
return 0;
}
else {
let radlat1 = Math.PI * lat1 / 180;
let radlat2 = Math.PI * lat2 / 180;
let theta = lon1 - lon2;
let radtheta = Math.PI * theta / 180;
let dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
if (dist > 1) {
dist = 1;
}
dist = Math.acos(dist);
dist = dist * 180 / Math.PI;
dist = dist * 60 * 1.1515;
if (unit == "K") { dist = dist * 1.609344 }
if (unit == "N") { dist = dist * 0.8684 }
return dist;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment