| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | "use strict";var __importDefault = (this && this.__importDefault) || function (mod) {    return (mod && mod.__esModule) ? mod : { "default": mod };};Object.defineProperty(exports, "__esModule", { value: true });var invariant_1 = require("@turf/invariant");var meta_1 = require("@turf/meta");var point_to_line_distance_1 = __importDefault(require("@turf/point-to-line-distance"));var object_assign_1 = __importDefault(require("object-assign"));/** * Returns the closest {@link Point|point}, of a {@link FeatureCollection|collection} of points, * to a {@link LineString|line}. The returned point has a `dist` property indicating its distance to the line. * * @name nearestPointToLine * @param {FeatureCollection|GeometryCollection<Point>} points Point Collection * @param {Feature|Geometry<LineString>} line Line Feature * @param {Object} [options] Optional parameters * @param {string} [options.units='kilometers'] unit of the output distance property * (eg: degrees, radians, miles, or kilometers) * @param {Object} [options.properties={}] Translate Properties to Point * @returns {Feature<Point>} the closest point * @example * var pt1 = turf.point([0, 0]); * var pt2 = turf.point([0.5, 0.5]); * var points = turf.featureCollection([pt1, pt2]); * var line = turf.lineString([[1,1], [-1,1]]); * * var nearest = turf.nearestPointToLine(points, line); * * //addToMap * var addToMap = [nearest, line]; */function nearestPointToLine(points, line, options) {    if (options === void 0) { options = {}; }    var units = options.units;    var properties = options.properties || {};    // validation    var pts = normalize(points);    if (!pts.features.length) {        throw new Error("points must contain features");    }    if (!line) {        throw new Error("line is required");    }    if (invariant_1.getType(line) !== "LineString") {        throw new Error("line must be a LineString");    }    var dist = Infinity;    var pt = null;    meta_1.featureEach(pts, function (point) {        var d = point_to_line_distance_1.default(point, line, { units: units });        if (d < dist) {            dist = d;            pt = point;        }    });    /**     * Translate Properties to final Point, priorities:     * 1. options.properties     * 2. inherent Point properties     * 3. dist custom properties created by NearestPointToLine     */    if (pt) {        pt.properties = object_assign_1.default({ dist: dist }, pt.properties, properties);    }    // if (pt) { pt.properties = objectAssign({dist}, pt.properties, properties); }    return pt;}/** * Convert Collection to FeatureCollection * * @private * @param {FeatureCollection|GeometryCollection} points Points * @returns {FeatureCollection<Point>} points */function normalize(points) {    var features = [];    var type = points.geometry ? points.geometry.type : points.type;    switch (type) {        case "GeometryCollection":            meta_1.geomEach(points, function (geom) {                if (geom.type === "Point") {                    features.push({ type: "Feature", properties: {}, geometry: geom });                }            });            return { type: "FeatureCollection", features: features };        case "FeatureCollection":            points.features = points.features.filter(function (feature) {                return feature.geometry.type === "Point";            });            return points;        default:            throw new Error("points must be a Point Collection");    }}exports.default = nearestPointToLine;
 |