1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var helpers_1 = require("@turf/helpers");
- var invariant_1 = require("@turf/invariant");
- var meta_1 = require("@turf/meta");
- /**
- * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a
- * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}.
- *
- * @name lineSegment
- * @param {GeoJSON} geojson GeoJSON Polygon or LineString
- * @returns {FeatureCollection<LineString>} 2-vertex line segments
- * @example
- * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);
- * var segments = turf.lineSegment(polygon);
- *
- * //addToMap
- * var addToMap = [polygon, segments]
- */
- function lineSegment(geojson) {
- if (!geojson) {
- throw new Error("geojson is required");
- }
- var results = [];
- meta_1.flattenEach(geojson, function (feature) {
- lineSegmentFeature(feature, results);
- });
- return helpers_1.featureCollection(results);
- }
- /**
- * Line Segment
- *
- * @private
- * @param {Feature<LineString|Polygon>} geojson Line or polygon feature
- * @param {Array} results push to results
- * @returns {void}
- */
- function lineSegmentFeature(geojson, results) {
- var coords = [];
- var geometry = geojson.geometry;
- if (geometry !== null) {
- switch (geometry.type) {
- case "Polygon":
- coords = invariant_1.getCoords(geometry);
- break;
- case "LineString":
- coords = [invariant_1.getCoords(geometry)];
- }
- coords.forEach(function (coord) {
- var segments = createSegments(coord, geojson.properties);
- segments.forEach(function (segment) {
- segment.id = results.length;
- results.push(segment);
- });
- });
- }
- }
- /**
- * Create Segments from LineString coordinates
- *
- * @private
- * @param {Array<Array<number>>} coords LineString coordinates
- * @param {*} properties GeoJSON properties
- * @returns {Array<Feature<LineString>>} line segments
- */
- function createSegments(coords, properties) {
- var segments = [];
- coords.reduce(function (previousCoords, currentCoords) {
- var segment = helpers_1.lineString([previousCoords, currentCoords], properties);
- segment.bbox = bbox(previousCoords, currentCoords);
- segments.push(segment);
- return currentCoords;
- });
- return segments;
- }
- /**
- * Create BBox between two coordinates (faster than @turf/bbox)
- *
- * @private
- * @param {Array<number>} coords1 Point coordinate
- * @param {Array<number>} coords2 Point coordinate
- * @returns {BBox} [west, south, east, north]
- */
- function bbox(coords1, coords2) {
- var x1 = coords1[0];
- var y1 = coords1[1];
- var x2 = coords2[0];
- var y2 = coords2[1];
- var west = x1 < x2 ? x1 : x2;
- var south = y1 < y2 ? y1 : y2;
- var east = x1 > x2 ? x1 : x2;
- var north = y1 > y2 ? y1 : y2;
- return [west, south, east, north];
- }
- exports.default = lineSegment;
|