| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
- var _distance = require('@turf/distance');
- var _helpers = require('@turf/helpers');
- var _meta = require('@turf/meta');
- var _tin = require('@turf/tin');
- // lib/turf-dissolve.ts
- var _clone = require('@turf/clone');
- var _invariant = require('@turf/invariant');
- // lib/turf-line-dissolve.ts
- function lineDissolve(geojson, options = {}) {
- options = options || {};
- if (!_helpers.isObject.call(void 0, options)) {
- throw new Error("options is invalid");
- }
- const mutate = options.mutate;
- if (_invariant.getType.call(void 0, geojson) !== "FeatureCollection") {
- throw new Error("geojson must be a FeatureCollection");
- }
- if (!geojson.features.length) {
- throw new Error("geojson is empty");
- }
- if (mutate === false || mutate === void 0) {
- geojson = _clone.clone.call(void 0, geojson);
- }
- const result = [];
- const lastLine = _meta.lineReduce.call(void 0,
- geojson,
- (previousLine, currentLine) => {
- const merged = mergeLineStrings(previousLine, currentLine);
- if (merged) {
- return merged;
- } else {
- result.push(previousLine);
- return currentLine;
- }
- }
- );
- if (lastLine) {
- result.push(lastLine);
- }
- if (!result.length) {
- return null;
- } else if (result.length === 1) {
- return result[0];
- } else {
- return _helpers.multiLineString.call(void 0,
- result.map((line) => {
- return line.coordinates;
- })
- );
- }
- }
- function coordId(coord) {
- return coord[0].toString() + "," + coord[1].toString();
- }
- function mergeLineStrings(a, b) {
- const coords1 = a.geometry.coordinates;
- const coords2 = b.geometry.coordinates;
- const s1 = coordId(coords1[0]);
- const e1 = coordId(coords1[coords1.length - 1]);
- const s2 = coordId(coords2[0]);
- const e2 = coordId(coords2[coords2.length - 1]);
- let coords;
- if (s1 === e2) {
- coords = coords2.concat(coords1.slice(1));
- } else if (s2 === e1) {
- coords = coords1.concat(coords2.slice(1));
- } else if (s1 === s2) {
- coords = coords1.slice(1).reverse().concat(coords2);
- } else if (e1 === e2) {
- coords = coords1.concat(coords2.reverse().slice(1));
- } else {
- return null;
- }
- return _helpers.lineString.call(void 0, coords);
- }
- // lib/turf-polygon-dissolve.ts
- var _topojsonclient = require('topojson-client');
- var _topojsonserver = require('topojson-server');
- function polygonDissolve(geojson, options = {}) {
- if (_invariant.getType.call(void 0, geojson) !== "FeatureCollection") {
- throw new Error("geojson must be a FeatureCollection");
- }
- if (!geojson.features.length) {
- throw new Error("geojson is empty");
- }
- if (options.mutate === false || options.mutate === void 0) {
- geojson = _clone.clone.call(void 0, geojson);
- }
- const geoms = [];
- _meta.flattenEach.call(void 0, geojson, (feature2) => {
- geoms.push(feature2.geometry);
- });
- const topo = _topojsonserver.topology.call(void 0, { geoms: _helpers.geometryCollection.call(void 0, geoms).geometry });
- const merged = _topojsonclient.merge.call(void 0, topo, topo.objects.geoms.geometries);
- return merged;
- }
- // lib/turf-dissolve.ts
- function dissolve(geojson, options = {}) {
- options = options || {};
- if (!_helpers.isObject.call(void 0, options)) {
- throw new Error("options is invalid");
- }
- const mutate = options.mutate;
- if (_invariant.getType.call(void 0, geojson) !== "FeatureCollection") {
- throw new Error("geojson must be a FeatureCollection");
- }
- if (!geojson.features.length) {
- throw new Error("geojson is empty");
- }
- if (mutate === false || mutate === void 0) {
- geojson = _clone.clone.call(void 0, geojson);
- }
- const type = getHomogenousType(geojson);
- if (!type) {
- throw new Error("geojson must be homogenous");
- }
- const data = geojson;
- switch (type) {
- case "LineString":
- return lineDissolve(data, options);
- case "Polygon":
- return polygonDissolve(data, options);
- default:
- throw new Error(type + " is not supported");
- }
- }
- function getHomogenousType(geojson) {
- const types = {};
- _meta.flattenEach.call(void 0, geojson, (feature2) => {
- types[feature2.geometry.type] = true;
- });
- const keys = Object.keys(types);
- if (keys.length === 1) {
- return keys[0];
- }
- return null;
- }
- // index.ts
- function concave(points, options = {}) {
- const maxEdge = options.maxEdge || Infinity;
- const cleaned = removeDuplicates(points);
- const tinPolys = _tin.tin.call(void 0, cleaned);
- tinPolys.features = tinPolys.features.filter((triangle) => {
- const pt1 = triangle.geometry.coordinates[0][0];
- const pt2 = triangle.geometry.coordinates[0][1];
- const pt3 = triangle.geometry.coordinates[0][2];
- const dist1 = _distance.distance.call(void 0, pt1, pt2, options);
- const dist2 = _distance.distance.call(void 0, pt2, pt3, options);
- const dist3 = _distance.distance.call(void 0, pt1, pt3, options);
- return dist1 <= maxEdge && dist2 <= maxEdge && dist3 <= maxEdge;
- });
- if (tinPolys.features.length < 1) {
- return null;
- }
- const dissolved = dissolve(tinPolys);
- if (dissolved.coordinates.length === 1) {
- dissolved.coordinates = dissolved.coordinates[0];
- dissolved.type = "Polygon";
- }
- return _helpers.feature.call(void 0, dissolved);
- }
- function removeDuplicates(points) {
- const cleaned = [];
- const existing = {};
- _meta.featureEach.call(void 0, points, (pt) => {
- if (!pt.geometry) {
- return;
- }
- const key = pt.geometry.coordinates.join("-");
- if (!Object.prototype.hasOwnProperty.call(existing, key)) {
- cleaned.push(pt);
- existing[key] = true;
- }
- });
- return _helpers.featureCollection.call(void 0, cleaned);
- }
- var turf_concave_default = concave;
- exports.concave = concave; exports.default = turf_concave_default;
- //# sourceMappingURL=index.cjs.map
|