geo.js 914 B

123456789101112131415161718192021222324252627282930313233343536
  1. /**
  2. * Converts numeric degrees to radians
  3. * @param val
  4. * @returns {number}
  5. */
  6. function toRad (val) {
  7. return val * Math.PI / 180
  8. }
  9. /**
  10. * This function takes in latitude and longitude of two location and returns the distance between them as the crow flies (in km)
  11. * @param lat1
  12. * @param lon1
  13. * @param lat2
  14. * @param lon2
  15. * @returns {number}
  16. */
  17. function sphericDistance (lat1, lon1, lat2, lon2) {
  18. lat1 = Number.parseFloat(lat1)
  19. lon1 = Number.parseFloat(lon1)
  20. lat2 = Number.parseFloat(lat2)
  21. lon2 = Number.parseFloat(lon2)
  22. const R = 6371 // km
  23. const dLat = toRad(lat2 - lat1)
  24. const dLon = toRad(lon2 - lon1)
  25. lat1 = toRad(lat1)
  26. lat2 = toRad(lat2)
  27. const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
  28. Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2)
  29. const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
  30. return R * c
  31. }
  32. export default sphericDistance