Skip to content

Latest commit

 

History

History
691 lines (534 loc) · 41.3 KB

CHANGELOG.md

File metadata and controls

691 lines (534 loc) · 41.3 KB

6.2.0-alpha.1

After a bit of hiatus, TurfJS is resuming releases.

⭐️ Major Updates

  • ES Modules available for all packages
  • Tree shaking should significantly reduce import size of @turf/turf

New Modules

[@turf/boolean-touches][boolean-touches]

Determines if two features touch but do not intersect

[@turf/boolean-valid][boolean-valid]

Checks if the geometry is a valid according to the OGC Simple Feature Specification

[@turf/quadrat-analysis][quadrat-analysis]

Performs a quadrat analysis on a set of points

[@turf/rectangle-grid][rectangle-grid]

Creates a grid of rectangles from a bounding box

Typescript types for the options parameter have been fixed (PR Turfjs#1424 - Author @stevage)

Typescript types around the Feature's Properties will now be preserved. (PR Turfjs#1761 - Author @rugheid)

Typescript types for the 'reverse' option are now correct. Previously it was misnamed as 'reversed'. (PR Turfjs#1786 - Author @jonnycornwell)

No longer publishes an .mjs file.

No longer publishes an .mjs file.

5.0.0 🎉

⭐️ Major Updates

  • TurfJS now supports ES Modules (Related PR's)
  • Optional parameters are now defined as an Object.

🚀 New Modules

Takes a FeatureCollection of points, and a bounding box, and returns a FeatureCollection of Voronoi polygons. (PR Turfjs#1043 - Author @stevage)

Returns the shortest path from start to end without colliding with any feature in obstacles (PR Turfjs#956 - Author @stebogit)

Boolean-Parallel returns True if each segment of line1 is parallel to the correspondent segment of line2 (PR Turfjs#941 - Author @stebogit)

Takes a {@link Point} and a {@link LineString} and calculates the closest Point on the (Multi)LineString. (PR Turfjs#939 - Author @stebogit)

🏅 New Features/Enhancements

🐛 Bug Fixes

⚠️ Breaking Change

  • Optional parameters are now defined as an Object:

Before

var from = [-75.343, 39.984];
var to = [-75.534, 39.123];
var units = 'miles';
var distance = turf.distance(from, to, units);

After

var from = [-75.343, 39.984];
var to = [-75.534, 39.123];
var options = {units: 'miles'};
var distance = turf.distance(from, to, options);

4.7.0

🚀 New Modules

  • toMercator: Converts a WGS84 GeoJSON object into Mercator (EPSG:900913) projection
  • toWgs84: Converts a Mercator (EPSG:900913) GeoJSON object into WGS84 projection

(PR Turfjs#927 - Author @stebogit)

Returns the minimum distance between a {@link Point} and a {@link LineString}, being the distance from a line the minimum distance between the point and any segment of the LineString.

(PR Turfjs#925 - Author @stebogit)

Boolean-within returns true if the first geometry is completely within the second geometry. The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a) must not intersect the exterior of the secondary (geometry b). Boolean-within returns the exact opposite result of the @turf/boolean-contains.

(PR Turfjs#924 - Author @rowanwins)

🏅 New Features/Enhancements

🐛 Bug Fixes

4.6.0

🚀 New Modules

🏅 New Features/Enhancements

  • Sets centered param default to true in @turf/point-grid (PR Turfjs#836 - Contributor @stebogit)
  • Adds MultiLineString support for @turf/point-on-line (PR Turfjs#838 - Contributor @stebogit)
  • Renames @turf/clusters => @turf/clusters-kmeans, plus adds deprecated warning message to @turf/[email protected] (See Issue Turfjs#845)
  • Changes output type of @turf/clusters-kmeans (See Issue Turfjs#850 - Contributor @DenisCarriere)
  • Adds segmentEach and segmentReduce functions to @turf/meta (See Issue Turfjs#850 - Contributor @DenisCarriere)
  • Adds tests and linting on JSDoc in TurfJS core from turf-www; see Issue Turfjs#859 (PR Turfjs#857 + Turfjs#864 + Turfjs#870 - Contributor @DenisCarriere @stebogit)
  • Introduces null Geometry support across TurfJS modules (See Issue Turfjs#853) (PR Turfjs#866 - Contributor @DenisCarriere)
  • Includes feature(Sub)Index in coordEach/coordReduce (@turf/meta) 🎉 (PR Turfjs#872 - Contributor @DenisCarriere)
  • Adds bbox and id params plus geometry method to @turf/helpers (PR Turfjs#877 - Contributor @DenisCarriere)

🐛 Bug Fixes

4.5.0

🚀 New Modules

  • @turf/clusters Takes a set of points and partition them into clusters using the k-means clustering algorithm. (PR Turfjs#787 - Author @stebogit )

  • @turf/boolean-disjoint Boolean-disjoint returns (TRUE) if the intersection of the two geometries is an empty set. (PR Turfjs#805 - Author @rowanwins)

  • @turf/boolean-contains Boolean-contains returns True if the second geometry is completely contained by the first geometry. The interiors of both geometries must intersect and, the interior and boundary of the secondary (geometry b) must not intersect the exterior of the primary (geometry a). Boolean-contains returns the exact opposite result of the @turf/boolean-within. (PR Turfjs#797 - Author @rowanwins)

  • @turf/boolean-crosses Boolean-Crosses returns True if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries. Boolean-Crosses returns t (TRUE) for only multipoint/polygon, multipoint/linestring, linestring/linestring, linestring/polygon, and linestring/multipolygon comparisons. (PR Turfjs#796 - Author @rowanwins)

  • @turf/boolean-clockwise Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise. (PR Turfjs#789 - Authors @morganherlocker @stebogit)

  • @turf/clone Prevents GeoJSON coordinates from being mutated, similar to JSON.parse(JSON.stringify(geojson)). Only cloning the coordinates can be 3x-20x faster than the parse + stringify approach. (PR Turfjs#824 - Author @DenisCarriere)

🏅 New Features/Enhancements

  • convertArea Converts a area to the requested unit. (PR Turfjs#821 - Author @wnordmann)
  • Adds mask option to @turf/point-grid (PR Turfjs#791)
  • New @turf/isolines based on MarchingSquares.js (PR Turfjs#781)
  • Use ES6 modules / Add module.js to @turf/turf (PR Turfjs#793)
  • Create-new-module script (PR Turfjs#823)

🐛 Bug Fixes

  • Buffer - Drop circle buffer operation (PR Turfjs#786)
  • Fixes @turf/idw bad property name #774 (PR Turfjs#800)
  • Fix for @turf/polygon-tangents - Resolves #785 (PR Turfjs#792)

4.4.0

🚀 New Modules

  • @turf/line-offset Adds a new lineOffset module as per this issue. Basically takes an input line and returns a new line offset by the distance. (PR Turfjs#729 - Author @rowanwins)
  • @turf/polygonize Polygonizes (Multi)LineString(s) into Polygons. Implementation of GEOSPolygonize function (geos::operation::polygonize::Polygonizer). (PR Turfjs#767 - Author @NickCis)
  • @turf/transform-rotate Rotates any geojson Feature or Geometry of a specified angle, around its centroid or a given pivot point; all rotations follow the right-hand rule. (Issue Turfjs#747 - Author @stebogit)
  • @turf/transform-translate Moves any geojson Feature or Geometry of a specified distance along a Rhumb Line on the provided direction angle. (Issue Turfjs#747 - Author @stebogit)
  • @turf/transform-scale Scale a GeoJSON from a given point by a factor of scaling (ex: factor=2 would make the GeoJSON 200% larger). If a FeatureCollection is provided, the origin point will be calculated based on each individual Feature. (Issue Turfjs#747 - Author @stebogit)

🏅 New Features

🐛 Bug Fixes

4.3.0

🚀 New Modules

🏅 New Features

🐛 Bug Fixes

4.2.0

New Modules

Enhancements

Bug Fixes

Changes

Documentation

4.1.0

New Modules

Enhancements

Bug Fixes

3.6.4

Typescript definitions index.d.ts added to all the packages.

3.0.11

Fix turf-line-slice bug with vertical linestrings.

3.0.1

This is a big change in Turf! 3.0.0 is a release that targets the development cycle of Turf, letting us work on it more and release more often.

Monorepo

Turf 3.x and forward is a monorepo project. We publish lots of little modules as usual, but there's one repo - turfjs/turf - that contains all the code and the issues for the Turf source code. We use lerna to link these packages together and make sure they work.

Why? We already had internal turf modules, like turf-meta, and development was harder and harder - we had a bunch of custom scripts to do releases and tests, and these were just written for Turf. Lerna is from the very popular and very well-maintained babel project, and it works really well, and reduces maintainer sadness.

Simplicity

Turf grew a bunch of modules that weren't totally necessary, or were expressing only a line or two of JavaScript. We want to make things easier, but these modules didn't make code more expressive and they hid complexity where it didn't need to be hidden. Turf 3.x focuses on the core functionalities we need, making sure they're tested and performant.

turf-erase has been renamed turf-difference to make its name more similar to the equivalents in other libraries.

Removed modules: merge, sum, min, max, average, median, variance, deviation, filter, remove, jenks, quantile. See the upgrade guide below for replacements.

Upgrading from v2

If you were using turf-merge

turf-merge repeatedly called turf-union on an array of polygons. Here's how to implement the same thing without the special module

var clone = require('clone');
var union = require('turf-union');
function merge(polygons) {
  var merged = clone(polygons.features[0]), features = polygons.features;
  for (var i = 0, len = features.length; i < len; i++) {
    var poly = features[i];
    if (poly.geometry) merged = union(merged, poly);
  }
  return merged;
}

An alternative method that merges pairs of features recursively. With large numbers and similar complexity of input geometries this can speed up run time by factor 10. Choose depending on your use case.

var union = require('turf-union');
function mergeBin(polygons) {
  var features = polygons.features;

  do {
    var merged = [], len = features.length;
    for (var i = 0; i < len-1; i += 2) {
      merged.push(turf.union(features[i], features[i+1]));
    }
    if (len % 2 !== 0) {
      merged.push(features[len-1]);
    }
    features = merged;
  } while(features.length > 1);

  return features[0];
}

If you were using turf-sum, min, max, average, median, variance, deviation

The turf-collect method provides the core of these statistical methods and lets you bring your own statistical library, like simple-statistics, science.js, or others.

For example, here's how to find the median of matched values with simple-statistics. Finding other statistics, like variance, mean, and so on simply use other methods from the statistics library.

var ss = require('simple-statistics');
var turf = require('@turf/turf');

var poly1 = turf.polygon([[[0,0],[10,0],[10,10],[0,10],[0,0]]]);
var poly2 = turf.polygon([[[10,0],[20,10],[20,20],[20,0],[10,0]]]);
var polyFC = turf.featureCollection([poly1, poly2]);
var pt1 = turf.point([5,5], {population: 200});
var pt2 = turf.point([1,3], {population: 600});
var pt3 = turf.point([14,2], {population: 100});
var pt4 = turf.point([13,1], {population: 200});
var pt5 = turf.point([19,7], {population: 300});
var ptFC = turf.featureCollection([pt1, pt2, pt3, pt4, pt5]);

// collects values from matching points into an array called 'values'
var collected = turf.collect(polyFC, ptFC, 'population', 'values');

// finds the median of those values.
collected.features.forEach(function (feature) {
  feature.properties.median = ss.median(feature.properties.values);
});

console.log(JSON.stringify(collected, null, 2));

If you were using turf-filter, turf-remove

These modules were thin wrappers around native JavaScript methods: use Array.filter instead:

var filteredFeatures = features.filter(function(feature) {
  return feature.properties.value > 10;
});

If you were using turf-jenks, turf-quantile

Use Array.map to get values, and then bring your own statistical calculation, like simple-statistics or science.js.

var values = features.map(function(feature) {
  return feature.properties.value;
});

If you were using turf-extent

turf-extent's name was changed to turf-bbox. It is functionally the same.

turf.bbox(poly) // [minx, miny, maxx, maxy]

2.0.0

  • turf-grid renamed turf-point-grid (turf.grid => turf.pointGrid)
  • turf-hex renamed turf-hex-grid (turf.hex => turf.hexGrid)
  • turf-hex-grid now has a required unit parameter
  • remove turf-isobands; use turf-isolines instead
  • added turf-square-grid (turf.squareGrid)
  • added turf-triangle-grid (turf.triangleGrid)
  • constrain turf-point-grid to the bbox

1.4.0

  • update all module dependencies to master
  • add support for features in turf.intersection
  • fix issues with turf.polygon coordinate wrapping inconsistencies
  • add unit parameter to turf.concave

1.3.5

  • harmonize turf-tin dependency tree

1.3.4

  • fixes bug in turf-along

1.3.3

  • added turf-line-slice for segmenting LineStrings with Points
  • turf-point-on-line for calculating the closest Point from a Point to a LineString

1.3.2

  • tin ~7x faster
  • Fix mutability issues with flip, erase: data passed to Turf should never be changed in place.
  • added turf-line-distance for geodesic measuring of LineStrings
  • added turf-along for calculating a the location of a Point x distance along a LineString
  • added turf-area for calculating the area of a given feature