What is @turf/union?
@turf/union is a part of the Turf.js library, which is a powerful geospatial analysis library written in JavaScript. The @turf/union package specifically allows you to perform union operations on GeoJSON polygons, merging multiple polygons into a single polygon.
What are @turf/union's main functionalities?
Union of Two Polygons
This feature allows you to merge two GeoJSON polygons into a single polygon. The code sample demonstrates how to create two polygons and then merge them using the `turf.union` function.
const turf = require('@turf/turf');
const polygon1 = turf.polygon([[
[-82.574787, 35.594087],
[-82.574787, 35.615581],
[-82.545261, 35.615581],
[-82.545261, 35.594087],
[-82.574787, 35.594087]
]]);
const polygon2 = turf.polygon([[
[-82.560024, 35.585153],
[-82.560024, 35.602602],
[-82.52964, 35.602602],
[-82.52964, 35.585153],
[-82.560024, 35.585153]
]]);
const union = turf.union(polygon1, polygon2);
console.log(JSON.stringify(union));
Union of Multiple Polygons
This feature allows you to merge multiple GeoJSON polygons into a single polygon. The code sample demonstrates how to create three polygons and then merge them sequentially using the `turf.union` function.
const turf = require('@turf/turf');
const polygon1 = turf.polygon([[
[-82.574787, 35.594087],
[-82.574787, 35.615581],
[-82.545261, 35.615581],
[-82.545261, 35.594087],
[-82.574787, 35.594087]
]]);
const polygon2 = turf.polygon([[
[-82.560024, 35.585153],
[-82.560024, 35.602602],
[-82.52964, 35.602602],
[-82.52964, 35.585153],
[-82.560024, 35.585153]
]]);
const polygon3 = turf.polygon([[
[-82.554024, 35.580153],
[-82.554024, 35.595602],
[-82.52464, 35.595602],
[-82.52464, 35.580153],
[-82.554024, 35.580153]
]]);
let union = turf.union(polygon1, polygon2);
union = turf.union(union, polygon3);
console.log(JSON.stringify(union));
Other packages similar to @turf/union
jsts
JSTS is a JavaScript library of spatial predicates and functions for processing geometry. It is a port of the well-known Java Topology Suite (JTS). JSTS provides a wide range of geometric operations, including union, intersection, and difference. Compared to @turf/union, JSTS offers a more comprehensive set of geometric operations but may be more complex to use.
martinez-polygon-clipping
Martinez Polygon Clipping is a library for performing boolean operations on polygons, such as union, intersection, and difference. It is known for its performance and accuracy. Compared to @turf/union, Martinez Polygon Clipping is more focused on boolean operations and may offer better performance for these specific tasks.
@turf/union
union
Takes two (Multi)Polygon(s) and returns a combined polygon. If the input polygons are not contiguous, this function returns a MultiPolygon feature.
Parameters
Examples
var poly1 = turf.polygon([[
[-82.574787, 35.594087],
[-82.574787, 35.615581],
[-82.545261, 35.615581],
[-82.545261, 35.594087],
[-82.574787, 35.594087]
]], {"fill": "#0f0"});
var poly2 = turf.polygon([[
[-82.560024, 35.585153],
[-82.560024, 35.602602],
[-82.52964, 35.602602],
[-82.52964, 35.585153],
[-82.560024, 35.585153]
]], {"fill": "#00f"});
var union = turf.union(poly1, poly2);
var addToMap = [poly1, poly2, union];
Returns Feature<(Polygon | MultiPolygon)> a combined Polygon or MultiPolygon feature
This module is part of the Turfjs project, an open source
module collection dedicated to geographic algorithms. It is maintained in the
Turfjs/turf repository, where you can create
PRs and issues.
Installation
Install this module individually:
$ npm install @turf/union
Or install the Turf module that includes it as a function:
$ npm install @turf/turf
6.2.0
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
- Better support for ESM modules (PR https://github.com/Turfjs/turf/pull/1942 - Author @diachedelic)
- Clean-up of test and benchmark running to make publishing easier
- Enforce styling using Prettier
- Enable ESLint and get rid of unused variables
- Upgrade rollup for more correct javascript module builds
- Only include ES5 code
🚀 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
[@turf/voroni
][voronoi]
Typescript types for the options parameter have been fixed
(PR https://github.com/Turfjs/turf/pull/1424 - Author @stevage)
[@turf/points-within-polygon
][points-within-polygon]
Typescript types around the Feature's Properties will now be preserved.
(PR https://github.com/Turfjs/turf/pull/1761 - Author @rugheid)
[@turf/rewind
][rewind]
Typescript types for the 'reverse' option are now correct. Previously it was misnamed as 'reversed'.
(PR https://github.com/Turfjs/turf/pull/1786 - Author @jonnycornwell)
[@turf/difference
][difference]
No longer publishes an .mjs file.
[@turf/meta
][meta]
No longer publishes an .mjs file.
[@turf/tag
][tag]
Add MultiPolygon support.
(PR https://github.com/Turfjs/turf/pull/1996 - Author bryceroney)
🐛 Bug Fixes
-
@turf/centroid
Don't visit first point twice when calculating centroid
(PR https://github.com/Turfjs/turf/pull/1894 - Author @rowanwins)
-
@turf/transform-translate
Better handling of negative distances
(PR https://github.com/Turfjs/turf/pull/1895 - Author @rowanwins)
-
@turf/union
, @turf/difference
, @turf/intersect
Use polygon-clipping library to fix correctness issues
(PR https://github.com/Turfjs/turf/pull/1916 - Authors @mbullington, @ngottlieb)
-
@turf/buffer
Change default number of steps to 8, and actually support the steps option
(PR https://github.com/Turfjs/turf/pull/1931 - Author stevenchanin)
-
@turf/buffer
Fix projection issues that produce undersized buffers at non-equatorial latitudes
(PR https://github.com/Turfjs/turf/pull/1956 - Author dyakovlev)
-
@turf/helpers
Add runtime checks to point() method, fixing an API break
(PR https://github.com/Turfjs/turf/pull/1964)
🏅 New Features/Enhancements
-
@turf/boolean-overlap
Better performance for MultiPoint geometries
(PR https://github.com/Turfjs/turf/pull/1910 - Author @mfedderly)
-
@turf/helpers
Add hectares to convertArea
(PR https://github.com/Turfjs/turf/pull/1943 - Author @DanielJDufour)
-
@turf/great-circle
Update Typescript types to support MultiLineString input
(PR https://github.com/Turfjs/turf/pull/1928 - Author kronick)
📖 Documentation
-
@turf/square-grid
Clarify inputs
(PR https://github.com/Turfjs/turf/pull/1885 - Author @raphael-leger)
-
@turf/greater-circle
Clarify properties option example
(PR https://github.com/Turfjs/turf/pull/1888 - Author @chris-catignani)
⚠️ Breaking Change
-
@turf/line-to-polygon
no longer modifies its input unless the mutate option is true
(PR https://github.com/Turfjs/turf/pull/1879 - Author @MortenBirk)
-
@turf/unkink-polygon
remove Number.prototype.modulo override
(PR https://github.com/Turfjs/turf/pull/1978)