From 5a9d40d49629bab7ff9cbbb2f00f7f9cbe16051d Mon Sep 17 00:00:00 2001 From: Paul Mourer Date: Mon, 23 Dec 2024 20:11:16 -0700 Subject: [PATCH] Reverted self intersection behavior for `boolean-disjoint` (#2772) Reverted default ignoreSelfIntersections to true, to bring it back in line with Turf 6.5.0 --------- Co-authored-by: James Beard --- packages/turf-boolean-disjoint/README.md | 2 +- packages/turf-boolean-disjoint/index.ts | 11 ++-- packages/turf-boolean-disjoint/test.ts | 79 +++++++++++++++++------- 3 files changed, 61 insertions(+), 31 deletions(-) diff --git a/packages/turf-boolean-disjoint/README.md b/packages/turf-boolean-disjoint/README.md index 6ef10acd1..5e3140afb 100644 --- a/packages/turf-boolean-disjoint/README.md +++ b/packages/turf-boolean-disjoint/README.md @@ -12,7 +12,7 @@ Boolean-disjoint returns (TRUE) if the intersection of the two geometries is an * `feature2` **([Geometry][1] | [Feature][2]\)** GeoJSON Feature or Geometry * `options` **[Object][3]** Optional parameters (optional, default `{}`) - * `options.ignoreSelfIntersections` **[boolean][4]** ignores self-intersections on input features (optional, default `false`) + * `options.ignoreSelfIntersections` **[boolean][4]** ignore self-intersections on input features (optional, default `true`) ### Examples diff --git a/packages/turf-boolean-disjoint/index.ts b/packages/turf-boolean-disjoint/index.ts index 4bcc07c42..0b8158eb1 100644 --- a/packages/turf-boolean-disjoint/index.ts +++ b/packages/turf-boolean-disjoint/index.ts @@ -18,7 +18,7 @@ import { polygonToLine } from "@turf/polygon-to-line"; * @param {Geometry|Feature} feature1 GeoJSON Feature or Geometry * @param {Geometry|Feature} feature2 GeoJSON Feature or Geometry * @param {Object} [options={}] Optional parameters - * @param {boolean} [options.ignoreSelfIntersections=false] ignores self-intersections on input features + * @param {boolean} [options.ignoreSelfIntersections=true] ignore self-intersections on input features * @returns {boolean} true if the intersection is an empty set, false otherwise * @example * var point = turf.point([2, 2]); @@ -30,13 +30,12 @@ import { polygonToLine } from "@turf/polygon-to-line"; function booleanDisjoint( feature1: Feature | Geometry, feature2: Feature | Geometry, - options: { + { + ignoreSelfIntersections = true, + }: { ignoreSelfIntersections?: boolean; - } = {} + } = { ignoreSelfIntersections: true } ): boolean { - const ignoreSelfIntersections: boolean = - options.ignoreSelfIntersections ?? false; - let bool = true; flattenEach(feature1, (flatten1) => { flattenEach(feature2, (flatten2) => { diff --git a/packages/turf-boolean-disjoint/test.ts b/packages/turf-boolean-disjoint/test.ts index ac92db184..391fe2571 100644 --- a/packages/turf-boolean-disjoint/test.ts +++ b/packages/turf-boolean-disjoint/test.ts @@ -14,7 +14,7 @@ test("turf-boolean-disjoint", (t) => { .sync(path.join(__dirname, "test", "true", "**", "*.geojson")) .forEach((filepath) => { const name = path.parse(filepath).name; - const geojson = loadJsonFileSync(filepath); + const geojson: GeoJSON.FeatureCollection = loadJsonFileSync(filepath); const feature1 = geojson.features[0]; const feature2 = geojson.features[1]; const result = disjoint(feature1, feature2); @@ -30,7 +30,7 @@ test("turf-boolean-disjoint", (t) => { .sync(path.join(__dirname, "test", "false", "**", "*.geojson")) .forEach((filepath) => { const name = path.parse(filepath).name; - const geojson = loadJsonFileSync(filepath); + const geojson: GeoJSON.FeatureCollection = loadJsonFileSync(filepath); const feature1 = geojson.features[0]; const feature2 = geojson.features[1]; const result = disjoint(feature1, feature2); @@ -117,64 +117,95 @@ test("turf-boolean-disjoin with ignoreSelfIntersections option", (t) => { }, }; - // Test without ignoringSelfIntersections option (default behavior) + const selfIntersectingPolygon: GeoJSON.Feature = { + type: "Feature", + properties: {}, + geometry: { + type: "Polygon", + coordinates: [ + [ + [1.5, 1], + [2, 1.5], + + [3, 0.5], + [-1, 3], + [1.5, 1], + ], + ], + }, + }; + + // Test with ignoringSelfIntersections = true (default behavior) let result = disjoint(selfIntersectingLineString, nonIntersectingLineString); - t.false( + t.true( result, - "[false] " + - "selfIntersectingLineString-LineString (ignoreSelfIntersections=false)" + "[true] " + + "selfIntersectingLineString-LineString (ignoreSelfIntersections=true)" ); result = disjoint(selfIntersectingLineString, intersectingLineString); t.false( result, "[false] " + - "selfIntersectingLineString-LineString (ignoreSelfIntersections=false)" + "selfIntersectingLineString-LineString (ignoreSelfIntersections=true)" ); result = disjoint(selfIntersectingLineString, intersectingPolygon); t.false( result, "[false] " + - "selfIntersectingLineString-Polygon (ignoreSelfIntersections=false)" + "selfIntersectingLineString-Polygon (ignoreSelfIntersections=true)" ); result = disjoint(selfIntersectingLineString, nonIntersectingPolygon); - t.false( + t.true( result, - "[false] " + - "selfIntersectingLineString-Polygon (ignoreSelfIntersections=false)" + "[true] " + + "selfIntersectingLineString-Polygon (ignoreSelfIntersections=true)" + ); + result = disjoint(selfIntersectingPolygon, nonIntersectingPolygon); + t.true( + result, + "[true] " + "selfIntersectingPolygon-Polygon (ignoreSelfIntersections=true)" ); - // Test with ignoringSelfIntersections option + // Test with ignoringSelfIntersections option set to false result = disjoint(selfIntersectingLineString, nonIntersectingLineString, { - ignoreSelfIntersections: true, + ignoreSelfIntersections: false, }); - t.true( + t.false( result, - "[true] " + - "selfIntersectingLineString-LineString (ignoreSelfIntersections=true)" + "[false] " + + "selfIntersectingLineString-LineString (ignoreSelfIntersections=false)" ); result = disjoint(selfIntersectingLineString, intersectingLineString, { - ignoreSelfIntersections: true, + ignoreSelfIntersections: false, }); t.false( result, "[false] " + - "selfIntersectingLineString-LineString (ignoreSelfIntersections=true)" + "selfIntersectingLineString-LineString (ignoreSelfIntersections=false)" ); result = disjoint(selfIntersectingLineString, intersectingPolygon, { - ignoreSelfIntersections: true, + ignoreSelfIntersections: false, }); t.false( result, "[false] " + - "selfIntersectingLineString-Polygon (ignoreSelfIntersections=true)" + "selfIntersectingLineString-Polygon (ignoreSelfIntersections=false)" ); result = disjoint(selfIntersectingLineString, nonIntersectingPolygon, { - ignoreSelfIntersections: true, + ignoreSelfIntersections: false, }); - t.true( + t.false( result, - "[true] " + - "selfIntersectingLineString-Polygon (ignoreSelfIntersections=true)" + "[false] " + + "selfIntersectingLineString-Polygon (ignoreSelfIntersections=false)" + ); + result = disjoint(selfIntersectingPolygon, nonIntersectingPolygon, { + ignoreSelfIntersections: false, + }); + t.false( + result, + "[false] " + + "selfIntersectingPolygon-Polygon (ignoreSelfIntersections=false)" ); t.end();