| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | import bearing from "@turf/bearing";import destination from "@turf/destination";import measureDistance from "@turf/distance";import { point } from "@turf/helpers";import { getGeom } from "@turf/invariant";/** * Takes a {@link LineString} and returns a {@link Point} at a specified distance along the line. * * @name along * @param {Feature<LineString>} line input line * @param {number} distance distance along the line * @param {Object} [options] Optional parameters * @param {string} [options.units="kilometers"] can be degrees, radians, miles, or kilometers * @returns {Feature<Point>} Point `distance` `units` along the line * @example * var line = turf.lineString([[-83, 30], [-84, 36], [-78, 41]]); * var options = {units: 'miles'}; * * var along = turf.along(line, 200, options); * * //addToMap * var addToMap = [along, line] */export default function along(line, distance, options) {    if (options === void 0) { options = {}; }    // Get Coords    var geom = getGeom(line);    var coords = geom.coordinates;    var travelled = 0;    for (var i = 0; i < coords.length; i++) {        if (distance >= travelled && i === coords.length - 1) {            break;        }        else if (travelled >= distance) {            var overshot = distance - travelled;            if (!overshot) {                return point(coords[i]);            }            else {                var direction = bearing(coords[i], coords[i - 1]) - 180;                var interpolated = destination(coords[i], overshot, direction, options);                return interpolated;            }        }        else {            travelled += measureDistance(coords[i], coords[i + 1], options);        }    }    return point(coords[coords.length - 1]);}
 |