1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import polygonClipping from 'polygon-clipping';
- import { polygon, multiPolygon } from '@turf/helpers';
- import { getGeom } from '@turf/invariant';
- /**
- * Finds the difference between two {@link Polygon|polygons} by clipping the second polygon from the first.
- *
- * @name difference
- * @param {Feature<Polygon|MultiPolygon>} polygon1 input Polygon feature
- * @param {Feature<Polygon|MultiPolygon>} polygon2 Polygon feature to difference from polygon1
- * @returns {Feature<Polygon|MultiPolygon>|null} a Polygon or MultiPolygon feature showing the area of `polygon1` excluding the area of `polygon2` (if empty returns `null`)
- * @example
- * var polygon1 = turf.polygon([[
- * [128, -26],
- * [141, -26],
- * [141, -21],
- * [128, -21],
- * [128, -26]
- * ]], {
- * "fill": "#F00",
- * "fill-opacity": 0.1
- * });
- * var polygon2 = turf.polygon([[
- * [126, -28],
- * [140, -28],
- * [140, -20],
- * [126, -20],
- * [126, -28]
- * ]], {
- * "fill": "#00F",
- * "fill-opacity": 0.1
- * });
- *
- * var difference = turf.difference(polygon1, polygon2);
- *
- * //addToMap
- * var addToMap = [polygon1, polygon2, difference];
- */
- function difference(polygon1, polygon2) {
- var geom1 = getGeom(polygon1);
- var geom2 = getGeom(polygon2);
- var properties = polygon1.properties || {};
- var differenced = polygonClipping.difference(
- geom1.coordinates,
- geom2.coordinates
- );
- if (differenced.length === 0) return null;
- if (differenced.length === 1) return polygon(differenced[0], properties);
- return multiPolygon(differenced, properties);
- }
- export default difference;
|