{"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"]}