{"version":3,"sources":["../../index.ts"],"sourcesContent":["import { coordEach } from \"@turf/meta\";\nimport { AllGeoJSON, isObject } from \"@turf/helpers\";\n\n/**\n * Takes a GeoJSON Feature or FeatureCollection and truncates the precision of the geometry.\n *\n * @function\n * @param {GeoJSON} geojson any GeoJSON Feature, FeatureCollection, Geometry or GeometryCollection.\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.precision=6] coordinate decimal precision\n * @param {number} [options.coordinates=3] maximum number of coordinates (primarly used to remove z coordinates)\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} layer with truncated geometry\n * @example\n * var point = turf.point([\n * 70.46923055566859,\n * 58.11088890802906,\n * 1508\n * ]);\n * var options = {precision: 3, coordinates: 2};\n * var truncated = turf.truncate(point, options);\n * //=truncated.geometry.coordinates => [70.469, 58.111]\n *\n * //addToMap\n * var addToMap = [truncated];\n */\nfunction truncate(\n geojson: T,\n options?: {\n precision?: number;\n coordinates?: number;\n mutate?: boolean;\n }\n): T {\n // Optional parameters\n options = options ?? {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var precision = options.precision;\n var coordinates = options.coordinates;\n var mutate = options.mutate;\n\n // default params\n precision =\n precision === undefined || precision === null || isNaN(precision)\n ? 6\n : precision;\n coordinates =\n coordinates === undefined || coordinates === null || isNaN(coordinates)\n ? 3\n : coordinates;\n\n // validation\n if (!geojson) throw new Error(\" is required\");\n if (typeof precision !== \"number\")\n throw new Error(\" must be a number\");\n if (typeof coordinates !== \"number\")\n throw new Error(\" must be a number\");\n\n // prevent input mutation\n if (mutate === false || mutate === undefined)\n geojson = JSON.parse(JSON.stringify(geojson));\n\n var factor = Math.pow(10, precision);\n\n // Truncate Coordinates\n coordEach(geojson, function (coords) {\n truncateCoords(coords, factor, coordinates!);\n });\n return geojson;\n}\n\n/**\n * Truncate Coordinates - Mutates coordinates in place\n *\n * @private\n * @param {Array} coords Geometry Coordinates\n * @param {number} factor rounding factor for coordinate decimal precision\n * @param {number} coordinates maximum number of coordinates (primarly used to remove z coordinates)\n * @returns {Array} mutated coordinates\n */\nfunction truncateCoords(coords: number[], factor: number, coordinates: number) {\n // Remove extra coordinates (usually elevation coordinates and more)\n if (coords.length > coordinates) coords.splice(coordinates, coords.length);\n\n // Truncate coordinate decimals\n for (var i = 0; i < coords.length; i++) {\n coords[i] = Math.round(coords[i] * factor) / factor;\n }\n return coords;\n}\n\nexport { truncate };\nexport default truncate;\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAqB,gBAAgB;AAyBrC,SAAS,SACP,SACA,SAKG;AAEH,YAAU,4BAAW,CAAC;AACtB,MAAI,CAAC,SAAS,OAAO,EAAG,OAAM,IAAI,MAAM,oBAAoB;AAC5D,MAAI,YAAY,QAAQ;AACxB,MAAI,cAAc,QAAQ;AAC1B,MAAI,SAAS,QAAQ;AAGrB,cACE,cAAc,UAAa,cAAc,QAAQ,MAAM,SAAS,IAC5D,IACA;AACN,gBACE,gBAAgB,UAAa,gBAAgB,QAAQ,MAAM,WAAW,IAClE,IACA;AAGN,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,uBAAuB;AACrD,MAAI,OAAO,cAAc;AACvB,UAAM,IAAI,MAAM,8BAA8B;AAChD,MAAI,OAAO,gBAAgB;AACzB,UAAM,IAAI,MAAM,gCAAgC;AAGlD,MAAI,WAAW,SAAS,WAAW;AACjC,cAAU,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AAE9C,MAAI,SAAS,KAAK,IAAI,IAAI,SAAS;AAGnC,YAAU,SAAS,SAAU,QAAQ;AACnC,mBAAe,QAAQ,QAAQ,WAAY;AAAA,EAC7C,CAAC;AACD,SAAO;AACT;AAWA,SAAS,eAAe,QAAkB,QAAgB,aAAqB;AAE7E,MAAI,OAAO,SAAS,YAAa,QAAO,OAAO,aAAa,OAAO,MAAM;AAGzE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,WAAO,CAAC,IAAI,KAAK,MAAM,OAAO,CAAC,IAAI,MAAM,IAAI;AAAA,EAC/C;AACA,SAAO;AACT;AAGA,IAAO,wBAAQ;","names":[]}