index.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. var clone_1 = __importDefault(require("@turf/clone"));
  7. var distance_1 = __importDefault(require("@turf/distance"));
  8. var meta_1 = require("@turf/meta");
  9. /**
  10. * Takes a reference {@link Point|point} and a FeatureCollection of Features
  11. * with Point geometries and returns the
  12. * point from the FeatureCollection closest to the reference. This calculation
  13. * is geodesic.
  14. *
  15. * @name nearestPoint
  16. * @param {Coord} targetPoint the reference point
  17. * @param {FeatureCollection<Point>} points against input point set
  18. * @returns {Feature<Point>} the closest point in the set to the reference point
  19. * @example
  20. * var targetPoint = turf.point([28.965797, 41.010086], {"marker-color": "#0F0"});
  21. * var points = turf.featureCollection([
  22. * turf.point([28.973865, 41.011122]),
  23. * turf.point([28.948459, 41.024204]),
  24. * turf.point([28.938674, 41.013324])
  25. * ]);
  26. *
  27. * var nearest = turf.nearestPoint(targetPoint, points);
  28. *
  29. * //addToMap
  30. * var addToMap = [targetPoint, points, nearest];
  31. * nearest.properties['marker-color'] = '#F00';
  32. */
  33. function nearestPoint(targetPoint, points) {
  34. // Input validation
  35. if (!targetPoint)
  36. throw new Error("targetPoint is required");
  37. if (!points)
  38. throw new Error("points is required");
  39. var nearest;
  40. var minDist = Infinity;
  41. var bestFeatureIndex = 0;
  42. meta_1.featureEach(points, function (pt, featureIndex) {
  43. var distanceToPoint = distance_1.default(targetPoint, pt);
  44. if (distanceToPoint < minDist) {
  45. bestFeatureIndex = featureIndex;
  46. minDist = distanceToPoint;
  47. }
  48. });
  49. nearest = clone_1.default(points.features[bestFeatureIndex]);
  50. nearest.properties.featureIndex = bestFeatureIndex;
  51. nearest.properties.distanceToPoint = minDist;
  52. return nearest;
  53. }
  54. exports.default = nearestPoint;