@turf/simplify 7.2.0 → 7.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/dist/cjs/index.cjs +6 -3
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +11 -12
- package/dist/esm/index.d.ts +11 -12
- package/dist/esm/index.js +6 -3
- package/dist/esm/index.js.map +1 -1
- package/package.json +14 -15
package/README.md
CHANGED
|
@@ -4,22 +4,22 @@
|
|
|
4
4
|
|
|
5
5
|
## simplify
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
[simplify-js][
|
|
7
|
+
Simplifies the geometries in a GeoJSON object. Uses the 2d version of
|
|
8
|
+
[simplify-js][1].
|
|
9
9
|
|
|
10
10
|
### Parameters
|
|
11
11
|
|
|
12
|
-
* `geojson` **[GeoJSON][
|
|
12
|
+
* `geojson` **[GeoJSON][2]** GeoJSON object to be simplified
|
|
13
13
|
* `options` **[Object][3]** Optional parameters (optional, default `{}`)
|
|
14
14
|
|
|
15
|
-
* `options.tolerance` **[number][4]**
|
|
16
|
-
* `options.highQuality` **[boolean][5]**
|
|
17
|
-
* `options.mutate` **[boolean][5]**
|
|
15
|
+
* `options.tolerance` **[number][4]** Simplification tolerance (optional, default `1`)
|
|
16
|
+
* `options.highQuality` **[boolean][5]** Produce a higher-quality simplification using a slower algorithm (optional, default `false`)
|
|
17
|
+
* `options.mutate` **[boolean][5]** Allow GeoJSON input to be mutated (significant performance improvement if true) (optional, default `false`)
|
|
18
18
|
|
|
19
19
|
### Examples
|
|
20
20
|
|
|
21
21
|
```javascript
|
|
22
|
-
|
|
22
|
+
const geojson = turf.polygon([[
|
|
23
23
|
[-70.603637, -33.399918],
|
|
24
24
|
[-70.614624, -33.395332],
|
|
25
25
|
[-70.639343, -33.392466],
|
|
@@ -41,18 +41,18 @@ var geojson = turf.polygon([[
|
|
|
41
41
|
[-70.594711, -33.406224],
|
|
42
42
|
[-70.603637, -33.399918]
|
|
43
43
|
]]);
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
const result0_01 = turf.simplify(geojson, {tolerance: 0.01 });
|
|
45
|
+
const result0_005 = turf.simplify(geojson, {tolerance: 0.005 });
|
|
46
46
|
|
|
47
47
|
//addToMap
|
|
48
|
-
|
|
48
|
+
const addToMap = [geojson, result0_01, result0_005]
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
Returns **[GeoJSON][
|
|
51
|
+
Returns **[GeoJSON][2]** Simplified GeoJSON
|
|
52
52
|
|
|
53
|
-
[1]: https://
|
|
53
|
+
[1]: https://mourner.github.io/simplify-js/
|
|
54
54
|
|
|
55
|
-
[2]:
|
|
55
|
+
[2]: https://tools.ietf.org/html/rfc7946#section-3
|
|
56
56
|
|
|
57
57
|
[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
|
|
58
58
|
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -125,10 +125,13 @@ function simplifyPolygon(coordinates, tolerance, highQuality) {
|
|
|
125
125
|
}
|
|
126
126
|
let ringTolerance = tolerance;
|
|
127
127
|
let simpleRing = simplify(ring, ringTolerance, highQuality);
|
|
128
|
-
while (!checkValidity(simpleRing)) {
|
|
128
|
+
while (!checkValidity(simpleRing) && ringTolerance >= Number.EPSILON) {
|
|
129
129
|
ringTolerance -= ringTolerance * 0.01;
|
|
130
130
|
simpleRing = simplify(ring, ringTolerance, highQuality);
|
|
131
131
|
}
|
|
132
|
+
if (!checkValidity(simpleRing)) {
|
|
133
|
+
return ring;
|
|
134
|
+
}
|
|
132
135
|
if (simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] || simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]) {
|
|
133
136
|
simpleRing.push(simpleRing[0]);
|
|
134
137
|
}
|
|
@@ -139,9 +142,9 @@ function checkValidity(ring) {
|
|
|
139
142
|
if (ring.length < 3) return false;
|
|
140
143
|
return !(ring.length === 3 && ring[2][0] === ring[0][0] && ring[2][1] === ring[0][1]);
|
|
141
144
|
}
|
|
142
|
-
var
|
|
145
|
+
var index_default = simplify2;
|
|
143
146
|
|
|
144
147
|
|
|
145
148
|
|
|
146
|
-
exports.default =
|
|
149
|
+
exports.default = index_default; exports.simplify = simplify2;
|
|
147
150
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-simplify/dist/cjs/index.cjs","../../index.ts","../../lib/simplify.js"],"names":["simplify"],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-simplify/dist/cjs/index.cjs","sourcesContent":[null,"import { Geometry, Position } from \"geojson\";\nimport { cleanCoords } from \"@turf/clean-coords\";\nimport { clone } from \"@turf/clone\";\nimport { geomEach } from \"@turf/meta\";\nimport { AllGeoJSON, isObject } from \"@turf/helpers\";\nimport { simplify as simplifyJS } from \"./lib/simplify.js\";\n\n/**\n * Takes a {@link GeoJSON} object and returns a simplified version. Internally uses the 2d version of\n * [simplify-js](http://mourner.github.io/simplify-js/) to perform simplification using the Ramer-Douglas-Peucker algorithm.\n *\n *\n * @function\n * @param {GeoJSON} geojson object to be simplified\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.tolerance=1] simplification tolerance\n * @param {boolean} [options.highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} a simplified GeoJSON\n * @example\n * var geojson = turf.polygon([[\n * [-70.603637, -33.399918],\n * [-70.614624, -33.395332],\n * [-70.639343, -33.392466],\n * [-70.659942, -33.394759],\n * [-70.683975, -33.404504],\n * [-70.697021, -33.419406],\n * [-70.701141, -33.434306],\n * [-70.700454, -33.446339],\n * [-70.694274, -33.458369],\n * [-70.682601, -33.465816],\n * [-70.668869, -33.472117],\n * [-70.646209, -33.473835],\n * [-70.624923, -33.472117],\n * [-70.609817, -33.468107],\n * [-70.595397, -33.458369],\n * [-70.587158, -33.442901],\n * [-70.587158, -33.426283],\n * [-70.590591, -33.414248],\n * [-70.594711, -33.406224],\n * [-70.603637, -33.399918]\n * ]]);\n * var options = {tolerance: 0.01, highQuality: false};\n * var simplified = turf.simplify(geojson, options);\n *\n * //addToMap\n * var addToMap = [geojson, simplified]\n */\nfunction simplify<T extends AllGeoJSON>(\n geojson: T,\n options: {\n tolerance?: number;\n highQuality?: boolean;\n mutate?: boolean;\n } = {}\n): T {\n // Optional parameters\n options = options ?? {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const tolerance = options.tolerance ?? 1;\n const highQuality = options.highQuality ?? false;\n const mutate = options.mutate ?? false;\n\n if (!geojson) throw new Error(\"geojson is required\");\n if (tolerance && tolerance < 0) throw new Error(\"invalid tolerance\");\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n geomEach(geojson, function (geom) {\n simplifyGeom(geom, tolerance, highQuality);\n });\n return geojson;\n}\n\n/**\n * Simplifies a feature's coordinates\n *\n * @private\n * @param {Geometry} geometry to be simplified\n * @param {number} [tolerance=1] simplification tolerance\n * @param {boolean} [highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @returns {Geometry} output\n */\nfunction simplifyGeom(\n geometry: Geometry,\n tolerance: number,\n highQuality: boolean\n) {\n const type = geometry.type;\n\n // \"unsimplyfiable\" geometry types\n if (type === \"Point\" || type === \"MultiPoint\") return geometry;\n\n // Remove any extra coordinates\n cleanCoords(geometry, { mutate: true });\n\n if (type !== \"GeometryCollection\") {\n // TODO should this cater for GeometryCollections too?\n switch (type) {\n case \"LineString\":\n geometry.coordinates = simplifyJS(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiLineString\":\n geometry.coordinates = geometry.coordinates.map((lines) =>\n simplifyJS(lines, tolerance, highQuality)\n );\n break;\n case \"Polygon\":\n geometry.coordinates = simplifyPolygon(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiPolygon\":\n geometry.coordinates = geometry.coordinates.map((rings) =>\n simplifyPolygon(rings, tolerance, highQuality)\n );\n }\n }\n\n return geometry;\n}\n\n/**\n * Simplifies the coordinates of a Polygon with simplify-js\n *\n * @private\n * @param {Array<number>} coordinates to be processed\n * @param {number} tolerance simplification tolerance\n * @param {boolean} highQuality whether or not to spend more time to create a higher-quality\n * @returns {Array<Array<Array<number>>>} simplified coords\n */\nfunction simplifyPolygon(\n coordinates: Position[][],\n tolerance: number,\n highQuality: boolean\n) {\n return coordinates.map(function (ring) {\n if (ring.length < 4) {\n throw new Error(\"invalid polygon\");\n }\n let ringTolerance = tolerance;\n let simpleRing = simplifyJS(ring, ringTolerance, highQuality);\n // remove 1 percent of tolerance until enough points to make a triangle\n while (!checkValidity(simpleRing)) {\n ringTolerance -= ringTolerance * 0.01;\n simpleRing = simplifyJS(ring, ringTolerance, highQuality);\n }\n if (\n simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] ||\n simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]\n ) {\n simpleRing.push(simpleRing[0]);\n }\n return simpleRing;\n });\n}\n\n/**\n * Returns true if ring has at least 3 coordinates and its first coordinate is the same as its last\n *\n * @private\n * @param {Array<number>} ring coordinates to be checked\n * @returns {boolean} true if valid\n */\nfunction checkValidity(ring: Position[]) {\n if (ring.length < 3) return false;\n //if the last point is the same as the first, it's not a triangle\n return !(\n ring.length === 3 &&\n ring[2][0] === ring[0][0] &&\n ring[2][1] === ring[0][1]\n );\n}\n\nexport { simplify };\nexport default simplify;\n","/*\n (c) 2013, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\n// to suit your point format, run search/replace for '.x' and '.y';\n// for 3D version, see 3d branch (configurability would draw significant performance overhead)\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p, p1, p2) {\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points, sqTolerance) {\n var prevPoint = points[0],\n newPoints = [prevPoint],\n point;\n\n for (var i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points, first, last, sqTolerance, simplified) {\n var maxSqDist = sqTolerance,\n index;\n\n for (var i = first + 1; i < last; i++) {\n var sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist) {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (index - first > 1)\n simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1)\n simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points, sqTolerance) {\n var last = points.length - 1;\n\n var simplified = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nfunction simplify(points, tolerance, highestQuality) {\n if (points.length <= 2) return points;\n\n var sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n\nexport { simplify };\nexport default simplify;\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-simplify/dist/cjs/index.cjs","../../index.ts","../../lib/simplify.js"],"names":["simplify"],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-simplify/dist/cjs/index.cjs","sourcesContent":[null,"import { Geometry, Position } from \"geojson\";\nimport { cleanCoords } from \"@turf/clean-coords\";\nimport { clone } from \"@turf/clone\";\nimport { geomEach } from \"@turf/meta\";\nimport { AllGeoJSON, isObject } from \"@turf/helpers\";\nimport { simplify as simplifyJS } from \"./lib/simplify.js\";\n\n/**\n * Simplifies the geometries in a GeoJSON object. Uses the 2d version of\n * [simplify-js](https://mourner.github.io/simplify-js/).\n *\n * @function\n * @param {GeoJSON} geojson GeoJSON object to be simplified\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.tolerance=1] Simplification tolerance\n * @param {boolean} [options.highQuality=false] Produce a higher-quality simplification using a slower algorithm\n * @param {boolean} [options.mutate=false] Allow GeoJSON input to be mutated (significant performance improvement if true)\n * @returns {GeoJSON} Simplified GeoJSON\n * @example\n * const geojson = turf.polygon([[\n * [-70.603637, -33.399918],\n * [-70.614624, -33.395332],\n * [-70.639343, -33.392466],\n * [-70.659942, -33.394759],\n * [-70.683975, -33.404504],\n * [-70.697021, -33.419406],\n * [-70.701141, -33.434306],\n * [-70.700454, -33.446339],\n * [-70.694274, -33.458369],\n * [-70.682601, -33.465816],\n * [-70.668869, -33.472117],\n * [-70.646209, -33.473835],\n * [-70.624923, -33.472117],\n * [-70.609817, -33.468107],\n * [-70.595397, -33.458369],\n * [-70.587158, -33.442901],\n * [-70.587158, -33.426283],\n * [-70.590591, -33.414248],\n * [-70.594711, -33.406224],\n * [-70.603637, -33.399918]\n * ]]);\n * const result0_01 = turf.simplify(geojson, {tolerance: 0.01 });\n * const result0_005 = turf.simplify(geojson, {tolerance: 0.005 });\n *\n * //addToMap\n * const addToMap = [geojson, result0_01, result0_005]\n */\nfunction simplify<T extends AllGeoJSON>(\n geojson: T,\n options: {\n tolerance?: number;\n highQuality?: boolean;\n mutate?: boolean;\n } = {}\n): T {\n // Optional parameters\n options = options ?? {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const tolerance = options.tolerance ?? 1;\n const highQuality = options.highQuality ?? false;\n const mutate = options.mutate ?? false;\n\n if (!geojson) throw new Error(\"geojson is required\");\n if (tolerance && tolerance < 0) throw new Error(\"invalid tolerance\");\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n geomEach(geojson, function (geom) {\n simplifyGeom(geom, tolerance, highQuality);\n });\n return geojson;\n}\n\n/**\n * Simplifies a feature's coordinates\n *\n * @private\n * @param {Geometry} geometry to be simplified\n * @param {number} [tolerance=1] simplification tolerance\n * @param {boolean} [highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @returns {Geometry} output\n */\nfunction simplifyGeom(\n geometry: Geometry,\n tolerance: number,\n highQuality: boolean\n) {\n const type = geometry.type;\n\n // \"unsimplyfiable\" geometry types\n if (type === \"Point\" || type === \"MultiPoint\") return geometry;\n\n // Remove any extra coordinates\n cleanCoords(geometry, { mutate: true });\n\n if (type !== \"GeometryCollection\") {\n // TODO should this cater for GeometryCollections too?\n switch (type) {\n case \"LineString\":\n geometry.coordinates = simplifyJS(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiLineString\":\n geometry.coordinates = geometry.coordinates.map((lines) =>\n simplifyJS(lines, tolerance, highQuality)\n );\n break;\n case \"Polygon\":\n geometry.coordinates = simplifyPolygon(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiPolygon\":\n geometry.coordinates = geometry.coordinates.map((rings) =>\n simplifyPolygon(rings, tolerance, highQuality)\n );\n }\n }\n\n return geometry;\n}\n\n/**\n * Simplifies the coordinates of a Polygon with simplify-js\n *\n * @private\n * @param {Array<number>} coordinates to be processed\n * @param {number} tolerance simplification tolerance\n * @param {boolean} highQuality whether or not to spend more time to create a higher-quality\n * @returns {Array<Array<Array<number>>>} simplified coords\n */\nfunction simplifyPolygon(\n coordinates: Position[][],\n tolerance: number,\n highQuality: boolean\n) {\n return coordinates.map(function (ring) {\n if (ring.length < 4) {\n throw new Error(\"invalid polygon\");\n }\n let ringTolerance = tolerance;\n let simpleRing = simplifyJS(ring, ringTolerance, highQuality);\n\n // If simplified ring isn't valid (has been over simplified) reduce the\n // tolerance by 1% and try again.\n while (!checkValidity(simpleRing) && ringTolerance >= Number.EPSILON) {\n ringTolerance -= ringTolerance * 0.01;\n simpleRing = simplifyJS(ring, ringTolerance, highQuality);\n }\n\n // If ring wasn't able to be simplified in a valid way, return it unchanged.\n if (!checkValidity(simpleRing)) {\n return ring;\n }\n\n // Close the ring if it wasn't already.\n if (\n simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] ||\n simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]\n ) {\n simpleRing.push(simpleRing[0]);\n }\n return simpleRing;\n });\n}\n\n/**\n * Returns true if ring has at least 3 coordinates and its first coordinate is the same as its last\n *\n * @private\n * @param {Array<number>} ring coordinates to be checked\n * @returns {boolean} true if valid\n */\nfunction checkValidity(ring: Position[]) {\n if (ring.length < 3) return false;\n //if the last point is the same as the first, it's not a triangle\n return !(\n ring.length === 3 &&\n ring[2][0] === ring[0][0] &&\n ring[2][1] === ring[0][1]\n );\n}\n\nexport { simplify };\nexport default simplify;\n","/*\n (c) 2013, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\n// to suit your point format, run search/replace for '.x' and '.y';\n// for 3D version, see 3d branch (configurability would draw significant performance overhead)\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p, p1, p2) {\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points, sqTolerance) {\n var prevPoint = points[0],\n newPoints = [prevPoint],\n point;\n\n for (var i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points, first, last, sqTolerance, simplified) {\n var maxSqDist = sqTolerance,\n index;\n\n for (var i = first + 1; i < last; i++) {\n var sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist) {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (index - first > 1)\n simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1)\n simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points, sqTolerance) {\n var last = points.length - 1;\n\n var simplified = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nfunction simplify(points, tolerance, highestQuality) {\n if (points.length <= 2) return points;\n\n var sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n\nexport { simplify };\nexport default simplify;\n"]}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { AllGeoJSON } from '@turf/helpers';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* [simplify-js](
|
|
6
|
-
*
|
|
4
|
+
* Simplifies the geometries in a GeoJSON object. Uses the 2d version of
|
|
5
|
+
* [simplify-js](https://mourner.github.io/simplify-js/).
|
|
7
6
|
*
|
|
8
7
|
* @function
|
|
9
|
-
* @param {GeoJSON} geojson object to be simplified
|
|
8
|
+
* @param {GeoJSON} geojson GeoJSON object to be simplified
|
|
10
9
|
* @param {Object} [options={}] Optional parameters
|
|
11
|
-
* @param {number} [options.tolerance=1]
|
|
12
|
-
* @param {boolean} [options.highQuality=false]
|
|
13
|
-
* @param {boolean} [options.mutate=false]
|
|
14
|
-
* @returns {GeoJSON}
|
|
10
|
+
* @param {number} [options.tolerance=1] Simplification tolerance
|
|
11
|
+
* @param {boolean} [options.highQuality=false] Produce a higher-quality simplification using a slower algorithm
|
|
12
|
+
* @param {boolean} [options.mutate=false] Allow GeoJSON input to be mutated (significant performance improvement if true)
|
|
13
|
+
* @returns {GeoJSON} Simplified GeoJSON
|
|
15
14
|
* @example
|
|
16
|
-
*
|
|
15
|
+
* const geojson = turf.polygon([[
|
|
17
16
|
* [-70.603637, -33.399918],
|
|
18
17
|
* [-70.614624, -33.395332],
|
|
19
18
|
* [-70.639343, -33.392466],
|
|
@@ -35,11 +34,11 @@ import { AllGeoJSON } from '@turf/helpers';
|
|
|
35
34
|
* [-70.594711, -33.406224],
|
|
36
35
|
* [-70.603637, -33.399918]
|
|
37
36
|
* ]]);
|
|
38
|
-
*
|
|
39
|
-
*
|
|
37
|
+
* const result0_01 = turf.simplify(geojson, {tolerance: 0.01 });
|
|
38
|
+
* const result0_005 = turf.simplify(geojson, {tolerance: 0.005 });
|
|
40
39
|
*
|
|
41
40
|
* //addToMap
|
|
42
|
-
*
|
|
41
|
+
* const addToMap = [geojson, result0_01, result0_005]
|
|
43
42
|
*/
|
|
44
43
|
declare function simplify<T extends AllGeoJSON>(geojson: T, options?: {
|
|
45
44
|
tolerance?: number;
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { AllGeoJSON } from '@turf/helpers';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* [simplify-js](
|
|
6
|
-
*
|
|
4
|
+
* Simplifies the geometries in a GeoJSON object. Uses the 2d version of
|
|
5
|
+
* [simplify-js](https://mourner.github.io/simplify-js/).
|
|
7
6
|
*
|
|
8
7
|
* @function
|
|
9
|
-
* @param {GeoJSON} geojson object to be simplified
|
|
8
|
+
* @param {GeoJSON} geojson GeoJSON object to be simplified
|
|
10
9
|
* @param {Object} [options={}] Optional parameters
|
|
11
|
-
* @param {number} [options.tolerance=1]
|
|
12
|
-
* @param {boolean} [options.highQuality=false]
|
|
13
|
-
* @param {boolean} [options.mutate=false]
|
|
14
|
-
* @returns {GeoJSON}
|
|
10
|
+
* @param {number} [options.tolerance=1] Simplification tolerance
|
|
11
|
+
* @param {boolean} [options.highQuality=false] Produce a higher-quality simplification using a slower algorithm
|
|
12
|
+
* @param {boolean} [options.mutate=false] Allow GeoJSON input to be mutated (significant performance improvement if true)
|
|
13
|
+
* @returns {GeoJSON} Simplified GeoJSON
|
|
15
14
|
* @example
|
|
16
|
-
*
|
|
15
|
+
* const geojson = turf.polygon([[
|
|
17
16
|
* [-70.603637, -33.399918],
|
|
18
17
|
* [-70.614624, -33.395332],
|
|
19
18
|
* [-70.639343, -33.392466],
|
|
@@ -35,11 +34,11 @@ import { AllGeoJSON } from '@turf/helpers';
|
|
|
35
34
|
* [-70.594711, -33.406224],
|
|
36
35
|
* [-70.603637, -33.399918]
|
|
37
36
|
* ]]);
|
|
38
|
-
*
|
|
39
|
-
*
|
|
37
|
+
* const result0_01 = turf.simplify(geojson, {tolerance: 0.01 });
|
|
38
|
+
* const result0_005 = turf.simplify(geojson, {tolerance: 0.005 });
|
|
40
39
|
*
|
|
41
40
|
* //addToMap
|
|
42
|
-
*
|
|
41
|
+
* const addToMap = [geojson, result0_01, result0_005]
|
|
43
42
|
*/
|
|
44
43
|
declare function simplify<T extends AllGeoJSON>(geojson: T, options?: {
|
|
45
44
|
tolerance?: number;
|
package/dist/esm/index.js
CHANGED
|
@@ -125,10 +125,13 @@ function simplifyPolygon(coordinates, tolerance, highQuality) {
|
|
|
125
125
|
}
|
|
126
126
|
let ringTolerance = tolerance;
|
|
127
127
|
let simpleRing = simplify(ring, ringTolerance, highQuality);
|
|
128
|
-
while (!checkValidity(simpleRing)) {
|
|
128
|
+
while (!checkValidity(simpleRing) && ringTolerance >= Number.EPSILON) {
|
|
129
129
|
ringTolerance -= ringTolerance * 0.01;
|
|
130
130
|
simpleRing = simplify(ring, ringTolerance, highQuality);
|
|
131
131
|
}
|
|
132
|
+
if (!checkValidity(simpleRing)) {
|
|
133
|
+
return ring;
|
|
134
|
+
}
|
|
132
135
|
if (simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] || simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]) {
|
|
133
136
|
simpleRing.push(simpleRing[0]);
|
|
134
137
|
}
|
|
@@ -139,9 +142,9 @@ function checkValidity(ring) {
|
|
|
139
142
|
if (ring.length < 3) return false;
|
|
140
143
|
return !(ring.length === 3 && ring[2][0] === ring[0][0] && ring[2][1] === ring[0][1]);
|
|
141
144
|
}
|
|
142
|
-
var
|
|
145
|
+
var index_default = simplify2;
|
|
143
146
|
export {
|
|
144
|
-
|
|
147
|
+
index_default as default,
|
|
145
148
|
simplify2 as simplify
|
|
146
149
|
};
|
|
147
150
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../index.ts","../../lib/simplify.js"],"sourcesContent":["import { Geometry, Position } from \"geojson\";\nimport { cleanCoords } from \"@turf/clean-coords\";\nimport { clone } from \"@turf/clone\";\nimport { geomEach } from \"@turf/meta\";\nimport { AllGeoJSON, isObject } from \"@turf/helpers\";\nimport { simplify as simplifyJS } from \"./lib/simplify.js\";\n\n/**\n * Takes a {@link GeoJSON} object and returns a simplified version. Internally uses the 2d version of\n * [simplify-js](http://mourner.github.io/simplify-js/) to perform simplification using the Ramer-Douglas-Peucker algorithm.\n *\n *\n * @function\n * @param {GeoJSON} geojson object to be simplified\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.tolerance=1] simplification tolerance\n * @param {boolean} [options.highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} a simplified GeoJSON\n * @example\n * var geojson = turf.polygon([[\n * [-70.603637, -33.399918],\n * [-70.614624, -33.395332],\n * [-70.639343, -33.392466],\n * [-70.659942, -33.394759],\n * [-70.683975, -33.404504],\n * [-70.697021, -33.419406],\n * [-70.701141, -33.434306],\n * [-70.700454, -33.446339],\n * [-70.694274, -33.458369],\n * [-70.682601, -33.465816],\n * [-70.668869, -33.472117],\n * [-70.646209, -33.473835],\n * [-70.624923, -33.472117],\n * [-70.609817, -33.468107],\n * [-70.595397, -33.458369],\n * [-70.587158, -33.442901],\n * [-70.587158, -33.426283],\n * [-70.590591, -33.414248],\n * [-70.594711, -33.406224],\n * [-70.603637, -33.399918]\n * ]]);\n * var options = {tolerance: 0.01, highQuality: false};\n * var simplified = turf.simplify(geojson, options);\n *\n * //addToMap\n * var addToMap = [geojson, simplified]\n */\nfunction simplify<T extends AllGeoJSON>(\n geojson: T,\n options: {\n tolerance?: number;\n highQuality?: boolean;\n mutate?: boolean;\n } = {}\n): T {\n // Optional parameters\n options = options ?? {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const tolerance = options.tolerance ?? 1;\n const highQuality = options.highQuality ?? false;\n const mutate = options.mutate ?? false;\n\n if (!geojson) throw new Error(\"geojson is required\");\n if (tolerance && tolerance < 0) throw new Error(\"invalid tolerance\");\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n geomEach(geojson, function (geom) {\n simplifyGeom(geom, tolerance, highQuality);\n });\n return geojson;\n}\n\n/**\n * Simplifies a feature's coordinates\n *\n * @private\n * @param {Geometry} geometry to be simplified\n * @param {number} [tolerance=1] simplification tolerance\n * @param {boolean} [highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @returns {Geometry} output\n */\nfunction simplifyGeom(\n geometry: Geometry,\n tolerance: number,\n highQuality: boolean\n) {\n const type = geometry.type;\n\n // \"unsimplyfiable\" geometry types\n if (type === \"Point\" || type === \"MultiPoint\") return geometry;\n\n // Remove any extra coordinates\n cleanCoords(geometry, { mutate: true });\n\n if (type !== \"GeometryCollection\") {\n // TODO should this cater for GeometryCollections too?\n switch (type) {\n case \"LineString\":\n geometry.coordinates = simplifyJS(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiLineString\":\n geometry.coordinates = geometry.coordinates.map((lines) =>\n simplifyJS(lines, tolerance, highQuality)\n );\n break;\n case \"Polygon\":\n geometry.coordinates = simplifyPolygon(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiPolygon\":\n geometry.coordinates = geometry.coordinates.map((rings) =>\n simplifyPolygon(rings, tolerance, highQuality)\n );\n }\n }\n\n return geometry;\n}\n\n/**\n * Simplifies the coordinates of a Polygon with simplify-js\n *\n * @private\n * @param {Array<number>} coordinates to be processed\n * @param {number} tolerance simplification tolerance\n * @param {boolean} highQuality whether or not to spend more time to create a higher-quality\n * @returns {Array<Array<Array<number>>>} simplified coords\n */\nfunction simplifyPolygon(\n coordinates: Position[][],\n tolerance: number,\n highQuality: boolean\n) {\n return coordinates.map(function (ring) {\n if (ring.length < 4) {\n throw new Error(\"invalid polygon\");\n }\n let ringTolerance = tolerance;\n let simpleRing = simplifyJS(ring, ringTolerance, highQuality);\n // remove 1 percent of tolerance until enough points to make a triangle\n while (!checkValidity(simpleRing)) {\n ringTolerance -= ringTolerance * 0.01;\n simpleRing = simplifyJS(ring, ringTolerance, highQuality);\n }\n if (\n simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] ||\n simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]\n ) {\n simpleRing.push(simpleRing[0]);\n }\n return simpleRing;\n });\n}\n\n/**\n * Returns true if ring has at least 3 coordinates and its first coordinate is the same as its last\n *\n * @private\n * @param {Array<number>} ring coordinates to be checked\n * @returns {boolean} true if valid\n */\nfunction checkValidity(ring: Position[]) {\n if (ring.length < 3) return false;\n //if the last point is the same as the first, it's not a triangle\n return !(\n ring.length === 3 &&\n ring[2][0] === ring[0][0] &&\n ring[2][1] === ring[0][1]\n );\n}\n\nexport { simplify };\nexport default simplify;\n","/*\n (c) 2013, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\n// to suit your point format, run search/replace for '.x' and '.y';\n// for 3D version, see 3d branch (configurability would draw significant performance overhead)\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p, p1, p2) {\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points, sqTolerance) {\n var prevPoint = points[0],\n newPoints = [prevPoint],\n point;\n\n for (var i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points, first, last, sqTolerance, simplified) {\n var maxSqDist = sqTolerance,\n index;\n\n for (var i = first + 1; i < last; i++) {\n var sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist) {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (index - first > 1)\n simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1)\n simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points, sqTolerance) {\n var last = points.length - 1;\n\n var simplified = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nfunction simplify(points, tolerance, highestQuality) {\n if (points.length <= 2) return points;\n\n var sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n\nexport { simplify };\nexport default simplify;\n"],"mappings":"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","names":["simplify","simplify"]}
|
|
1
|
+
{"version":3,"sources":["../../index.ts","../../lib/simplify.js"],"sourcesContent":["import { Geometry, Position } from \"geojson\";\nimport { cleanCoords } from \"@turf/clean-coords\";\nimport { clone } from \"@turf/clone\";\nimport { geomEach } from \"@turf/meta\";\nimport { AllGeoJSON, isObject } from \"@turf/helpers\";\nimport { simplify as simplifyJS } from \"./lib/simplify.js\";\n\n/**\n * Simplifies the geometries in a GeoJSON object. Uses the 2d version of\n * [simplify-js](https://mourner.github.io/simplify-js/).\n *\n * @function\n * @param {GeoJSON} geojson GeoJSON object to be simplified\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.tolerance=1] Simplification tolerance\n * @param {boolean} [options.highQuality=false] Produce a higher-quality simplification using a slower algorithm\n * @param {boolean} [options.mutate=false] Allow GeoJSON input to be mutated (significant performance improvement if true)\n * @returns {GeoJSON} Simplified GeoJSON\n * @example\n * const geojson = turf.polygon([[\n * [-70.603637, -33.399918],\n * [-70.614624, -33.395332],\n * [-70.639343, -33.392466],\n * [-70.659942, -33.394759],\n * [-70.683975, -33.404504],\n * [-70.697021, -33.419406],\n * [-70.701141, -33.434306],\n * [-70.700454, -33.446339],\n * [-70.694274, -33.458369],\n * [-70.682601, -33.465816],\n * [-70.668869, -33.472117],\n * [-70.646209, -33.473835],\n * [-70.624923, -33.472117],\n * [-70.609817, -33.468107],\n * [-70.595397, -33.458369],\n * [-70.587158, -33.442901],\n * [-70.587158, -33.426283],\n * [-70.590591, -33.414248],\n * [-70.594711, -33.406224],\n * [-70.603637, -33.399918]\n * ]]);\n * const result0_01 = turf.simplify(geojson, {tolerance: 0.01 });\n * const result0_005 = turf.simplify(geojson, {tolerance: 0.005 });\n *\n * //addToMap\n * const addToMap = [geojson, result0_01, result0_005]\n */\nfunction simplify<T extends AllGeoJSON>(\n geojson: T,\n options: {\n tolerance?: number;\n highQuality?: boolean;\n mutate?: boolean;\n } = {}\n): T {\n // Optional parameters\n options = options ?? {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const tolerance = options.tolerance ?? 1;\n const highQuality = options.highQuality ?? false;\n const mutate = options.mutate ?? false;\n\n if (!geojson) throw new Error(\"geojson is required\");\n if (tolerance && tolerance < 0) throw new Error(\"invalid tolerance\");\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n geomEach(geojson, function (geom) {\n simplifyGeom(geom, tolerance, highQuality);\n });\n return geojson;\n}\n\n/**\n * Simplifies a feature's coordinates\n *\n * @private\n * @param {Geometry} geometry to be simplified\n * @param {number} [tolerance=1] simplification tolerance\n * @param {boolean} [highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @returns {Geometry} output\n */\nfunction simplifyGeom(\n geometry: Geometry,\n tolerance: number,\n highQuality: boolean\n) {\n const type = geometry.type;\n\n // \"unsimplyfiable\" geometry types\n if (type === \"Point\" || type === \"MultiPoint\") return geometry;\n\n // Remove any extra coordinates\n cleanCoords(geometry, { mutate: true });\n\n if (type !== \"GeometryCollection\") {\n // TODO should this cater for GeometryCollections too?\n switch (type) {\n case \"LineString\":\n geometry.coordinates = simplifyJS(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiLineString\":\n geometry.coordinates = geometry.coordinates.map((lines) =>\n simplifyJS(lines, tolerance, highQuality)\n );\n break;\n case \"Polygon\":\n geometry.coordinates = simplifyPolygon(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiPolygon\":\n geometry.coordinates = geometry.coordinates.map((rings) =>\n simplifyPolygon(rings, tolerance, highQuality)\n );\n }\n }\n\n return geometry;\n}\n\n/**\n * Simplifies the coordinates of a Polygon with simplify-js\n *\n * @private\n * @param {Array<number>} coordinates to be processed\n * @param {number} tolerance simplification tolerance\n * @param {boolean} highQuality whether or not to spend more time to create a higher-quality\n * @returns {Array<Array<Array<number>>>} simplified coords\n */\nfunction simplifyPolygon(\n coordinates: Position[][],\n tolerance: number,\n highQuality: boolean\n) {\n return coordinates.map(function (ring) {\n if (ring.length < 4) {\n throw new Error(\"invalid polygon\");\n }\n let ringTolerance = tolerance;\n let simpleRing = simplifyJS(ring, ringTolerance, highQuality);\n\n // If simplified ring isn't valid (has been over simplified) reduce the\n // tolerance by 1% and try again.\n while (!checkValidity(simpleRing) && ringTolerance >= Number.EPSILON) {\n ringTolerance -= ringTolerance * 0.01;\n simpleRing = simplifyJS(ring, ringTolerance, highQuality);\n }\n\n // If ring wasn't able to be simplified in a valid way, return it unchanged.\n if (!checkValidity(simpleRing)) {\n return ring;\n }\n\n // Close the ring if it wasn't already.\n if (\n simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] ||\n simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]\n ) {\n simpleRing.push(simpleRing[0]);\n }\n return simpleRing;\n });\n}\n\n/**\n * Returns true if ring has at least 3 coordinates and its first coordinate is the same as its last\n *\n * @private\n * @param {Array<number>} ring coordinates to be checked\n * @returns {boolean} true if valid\n */\nfunction checkValidity(ring: Position[]) {\n if (ring.length < 3) return false;\n //if the last point is the same as the first, it's not a triangle\n return !(\n ring.length === 3 &&\n ring[2][0] === ring[0][0] &&\n ring[2][1] === ring[0][1]\n );\n}\n\nexport { simplify };\nexport default simplify;\n","/*\n (c) 2013, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\n// to suit your point format, run search/replace for '.x' and '.y';\n// for 3D version, see 3d branch (configurability would draw significant performance overhead)\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p, p1, p2) {\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points, sqTolerance) {\n var prevPoint = points[0],\n newPoints = [prevPoint],\n point;\n\n for (var i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points, first, last, sqTolerance, simplified) {\n var maxSqDist = sqTolerance,\n index;\n\n for (var i = first + 1; i < last; i++) {\n var sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist) {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (index - first > 1)\n simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1)\n simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points, sqTolerance) {\n var last = points.length - 1;\n\n var simplified = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nfunction simplify(points, tolerance, highestQuality) {\n if (points.length <= 2) return points;\n\n var sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n\nexport { simplify };\nexport default simplify;\n"],"mappings":"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","names":["simplify","simplify"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@turf/simplify",
|
|
3
|
-
"version": "7.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "7.3.1",
|
|
4
|
+
"description": "Reduces the number of points in a shape while keeping its overall look.",
|
|
5
5
|
"author": "Turf Authors",
|
|
6
6
|
"contributors": [
|
|
7
7
|
"Vladimir Agafonkin <@mourner>",
|
|
@@ -53,30 +53,29 @@
|
|
|
53
53
|
"bench": "tsx bench.ts",
|
|
54
54
|
"build": "tsup --config ../../tsup.config.ts",
|
|
55
55
|
"docs": "tsx ../../scripts/generate-readmes.ts",
|
|
56
|
-
"test": "
|
|
56
|
+
"test": "pnpm run /test:.*/",
|
|
57
57
|
"test:tape": "tsx test.ts",
|
|
58
58
|
"test:types": "tsc --esModuleInterop --module node16 --moduleResolution node16 --noEmit --strict types.ts"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@turf/truncate": "
|
|
61
|
+
"@turf/truncate": "7.3.1",
|
|
62
62
|
"@types/benchmark": "^2.1.5",
|
|
63
|
-
"@types/tape": "^
|
|
63
|
+
"@types/tape": "^5.8.1",
|
|
64
64
|
"benchmark": "^2.1.4",
|
|
65
65
|
"load-json-file": "^7.0.1",
|
|
66
|
-
"npm-run-all": "^4.1.5",
|
|
67
66
|
"tape": "^5.9.0",
|
|
68
|
-
"tsup": "^8.
|
|
69
|
-
"tsx": "^4.19.
|
|
70
|
-
"typescript": "^5.
|
|
71
|
-
"write-json-file": "^
|
|
67
|
+
"tsup": "^8.4.0",
|
|
68
|
+
"tsx": "^4.19.4",
|
|
69
|
+
"typescript": "^5.8.3",
|
|
70
|
+
"write-json-file": "^6.0.0"
|
|
72
71
|
},
|
|
73
72
|
"dependencies": {
|
|
74
|
-
"@turf/clean-coords": "
|
|
75
|
-
"@turf/clone": "
|
|
76
|
-
"@turf/helpers": "
|
|
77
|
-
"@turf/meta": "
|
|
73
|
+
"@turf/clean-coords": "7.3.1",
|
|
74
|
+
"@turf/clone": "7.3.1",
|
|
75
|
+
"@turf/helpers": "7.3.1",
|
|
76
|
+
"@turf/meta": "7.3.1",
|
|
78
77
|
"@types/geojson": "^7946.0.10",
|
|
79
78
|
"tslib": "^2.8.1"
|
|
80
79
|
},
|
|
81
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "b7f1b4eafb760431e03955499d8eac9489438219"
|
|
82
81
|
}
|