| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | 'use strict';var invariant = require('@turf/invariant');var helpers = require('@turf/helpers');var nearestPointOnLine = require('@turf/nearest-point-on-line');function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }var nearestPointOnLine__default = /*#__PURE__*/_interopDefaultLegacy(nearestPointOnLine);/** * Takes a {@link LineString|line}, a start {@link Point}, and a stop point * and returns a subsection of the line in-between those points. * The start & stop points don't need to fall exactly on the line. * * This can be useful for extracting only the part of a route between waypoints. * * @name lineSlice * @param {Coord} startPt starting point * @param {Coord} stopPt stopping point * @param {Feature<LineString>|LineString} line line to slice * @returns {Feature<LineString>} sliced line * @example * var line = turf.lineString([ *     [-77.031669, 38.878605], *     [-77.029609, 38.881946], *     [-77.020339, 38.884084], *     [-77.025661, 38.885821], *     [-77.021884, 38.889563], *     [-77.019824, 38.892368] * ]); * var start = turf.point([-77.029609, 38.881946]); * var stop = turf.point([-77.021884, 38.889563]); * * var sliced = turf.lineSlice(start, stop, line); * * //addToMap * var addToMap = [start, stop, line] */function lineSlice(startPt, stopPt, line) {  // Validation  var coords = invariant.getCoords(line);  if (invariant.getType(line) !== "LineString")    throw new Error("line must be a LineString");  var startVertex = nearestPointOnLine__default['default'](line, startPt);  var stopVertex = nearestPointOnLine__default['default'](line, stopPt);  var ends;  if (startVertex.properties.index <= stopVertex.properties.index) {    ends = [startVertex, stopVertex];  } else {    ends = [stopVertex, startVertex];  }  var clipCoords = [ends[0].geometry.coordinates];  for (    var i = ends[0].properties.index + 1;    i < ends[1].properties.index + 1;    i++  ) {    clipCoords.push(coords[i]);  }  clipCoords.push(ends[1].geometry.coordinates);  return helpers.lineString(clipCoords, line.properties);}module.exports = lineSlice;module.exports.default = lineSlice;
 |