index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { getCoord } from "@turf/invariant";
  2. import { radiansToLength, degreesToRadians, } from "@turf/helpers";
  3. //http://en.wikipedia.org/wiki/Haversine_formula
  4. //http://www.movable-type.co.uk/scripts/latlong.html
  5. /**
  6. * Calculates the distance between two {@link Point|points} in degrees, radians, miles, or kilometers.
  7. * This uses the [Haversine formula](http://en.wikipedia.org/wiki/Haversine_formula) to account for global curvature.
  8. *
  9. * @name distance
  10. * @param {Coord | Point} from origin point or coordinate
  11. * @param {Coord | Point} to destination point or coordinate
  12. * @param {Object} [options={}] Optional parameters
  13. * @param {string} [options.units='kilometers'] can be degrees, radians, miles, or kilometers
  14. * @returns {number} distance between the two points
  15. * @example
  16. * var from = turf.point([-75.343, 39.984]);
  17. * var to = turf.point([-75.534, 39.123]);
  18. * var options = {units: 'miles'};
  19. *
  20. * var distance = turf.distance(from, to, options);
  21. *
  22. * //addToMap
  23. * var addToMap = [from, to];
  24. * from.properties.distance = distance;
  25. * to.properties.distance = distance;
  26. */
  27. function distance(from, to, options) {
  28. if (options === void 0) { options = {}; }
  29. var coordinates1 = getCoord(from);
  30. var coordinates2 = getCoord(to);
  31. var dLat = degreesToRadians(coordinates2[1] - coordinates1[1]);
  32. var dLon = degreesToRadians(coordinates2[0] - coordinates1[0]);
  33. var lat1 = degreesToRadians(coordinates1[1]);
  34. var lat2 = degreesToRadians(coordinates2[1]);
  35. var a = Math.pow(Math.sin(dLat / 2), 2) +
  36. Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);
  37. return radiansToLength(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)), options.units);
  38. }
  39. export default distance;