diff --git a/packages/turf-truncate/bench.js b/packages/turf-truncate/bench.js
index 5e162e8232..b82f854f79 100644
--- a/packages/turf-truncate/bench.js
+++ b/packages/turf-truncate/bench.js
@@ -1,7 +1,7 @@
-const Benchmark = require('benchmark');
-const path = require('path');
const fs = require('fs');
+const path = require('path');
const load = require('load-json-file');
+const Benchmark = require('benchmark');
const truncate = require('./');
const directory = path.join(__dirname, 'test', 'in') + path.sep;
@@ -14,6 +14,24 @@ let fixtures = fs.readdirSync(directory).map(filename => {
});
// fixtures = fixtures.filter(fixture => fixture.name === 'polygons');
+/**
+ * Single Process Benchmark
+ *
+ * geometry-collection: 0.563ms
+ * linestring-geometry: 0.076ms
+ * point-elevation: 0.046ms
+ * point-geometry: 0.012ms
+ * point: 0.022ms
+ * points: 0.028ms
+ * polygon: 0.030ms
+ * polygons: 0.030ms
+ */
+for (const {name, geojson} of fixtures) {
+ console.time(name);
+ truncate(geojson, 6, 2, true);
+ console.timeEnd(name);
+}
+
/**
* Benchmark Results
*
diff --git a/packages/turf-truncate/index.d.ts b/packages/turf-truncate/index.d.ts
index e717da0b31..75c7158d9a 100644
--- a/packages/turf-truncate/index.d.ts
+++ b/packages/turf-truncate/index.d.ts
@@ -1,14 +1,15 @@
///
-type Feature = GeoJSON.Feature;
-type Features = GeoJSON.FeatureCollection;
-type Geometry = GeoJSON.GeometryObject;
-type Geometries = GeoJSON.GeometryCollection;
-type Truncate = Feature | Features | Geometry | Geometries;
+type Geoms = GeoJSON.Feature | GeoJSON.FeatureCollection | GeoJSON.GeometryObject | GeoJSON.GeometryCollection;
/**
* http://turfjs.org/docs/#truncate
*/
-declare function truncate(geojson: Input, precision?: number, coordinates?: number, mutate?: boolean): Input;
+declare function truncate(
+ geojson: Geom,
+ precision?: number,
+ coordinates?: number,
+ mutate?: boolean): Geom;
+
declare namespace truncate { }
export = truncate;
diff --git a/packages/turf-truncate/index.js b/packages/turf-truncate/index.js
index cc42f860cd..9c56b79c66 100644
--- a/packages/turf-truncate/index.js
+++ b/packages/turf-truncate/index.js
@@ -6,7 +6,7 @@ var coordEach = require('@turf/meta').coordEach;
* @name truncate
* @param {FeatureCollection|Feature} geojson any GeoJSON Feature, FeatureCollection, Geometry or GeometryCollection.
* @param {number} [precision=6] coordinate decimal precision
- * @param {number} [coordinates=2] maximum number of coordinates (primarly used to remove z coordinates)
+ * @param {number} [coordinates=3] maximum number of coordinates (primarly used to remove z coordinates)
* @param {boolean} [mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)
* @returns {FeatureCollection|Feature} layer with truncated geometry
* @example
@@ -29,8 +29,8 @@ var coordEach = require('@turf/meta').coordEach;
*/
module.exports = function (geojson, precision, coordinates, mutate) {
// default params
- precision = (precision !== undefined) ? precision : 6;
- coordinates = (coordinates !== undefined) ? coordinates : 2;
+ precision = (precision === undefined || precision === null || isNaN(precision)) ? 6 : precision;
+ coordinates = (coordinates === undefined || coordinates === null || isNaN(coordinates)) ? 3 : coordinates;
// validation
if (!geojson) throw new Error(' is required');
diff --git a/packages/turf-truncate/test.js b/packages/turf-truncate/test.js
index 6fb0e7a2f6..71bef70652 100644
--- a/packages/turf-truncate/test.js
+++ b/packages/turf-truncate/test.js
@@ -3,7 +3,7 @@ const test = require('tape');
const path = require('path');
const load = require('load-json-file');
const write = require('write-json-file');
-const point = require('@turf/helpers').point;
+const {point} = require('@turf/helpers');
const truncate = require('./');
const directories = {
@@ -34,15 +34,19 @@ test('turf-truncate', t => {
test('turf-truncate - precision & coordinates', t => {
t.deepEqual(truncate(point([50.1234567, 40.1234567]), 3).geometry.coordinates, [50.123, 40.123], 'precision 3');
t.deepEqual(truncate(point([50.1234567, 40.1234567]), 0).geometry.coordinates, [50, 40], 'precision 0');
+ t.deepEqual(truncate(point([50, 40, 1100]), 6).geometry.coordinates, [50, 40, 1100], 'coordinates default to 3');
t.deepEqual(truncate(point([50, 40, 1100]), 6, 2).geometry.coordinates, [50, 40], 'coordinates 2');
t.end();
});
-test('turf-truncate - handle input mutation', t => {
- const geojson = point([120.123, 40.123, 3000]);
- truncate(geojson, 0);
- t.deepEqual(geojson, point([120.123, 40.123, 3000]), 'does not mutate input');
- truncate(geojson, 0, 2, true);
- t.deepEqual(geojson, point([120, 40]), 'does mutate input');
+test('turf-truncate - prevent input mutation', t => {
+ const pt = point([120.123, 40.123, 3000]);
+ const ptBefore = JSON.parse(JSON.stringify(pt));
+
+ truncate(pt, 0);
+ t.deepEqual(ptBefore, pt, 'does not mutate input');
+
+ truncate(pt, 0, 2, true);
+ t.deepEqual(pt, point([120, 40]), 'does mutate input');
t.end();
});