Skip to content

Commit

Permalink
Reverted self intersection behavior for boolean-disjoint (#2772)
Browse files Browse the repository at this point in the history
Reverted default ignoreSelfIntersections to true, to bring it back in line with Turf 6.5.0

---------

Co-authored-by: James Beard <[email protected]>
  • Loading branch information
pm0u and smallsaucepan authored Dec 24, 2024
1 parent 3bbd759 commit 5a9d40d
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 31 deletions.
2 changes: 1 addition & 1 deletion packages/turf-boolean-disjoint/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Boolean-disjoint returns (TRUE) if the intersection of the two geometries is an
* `feature2` **([Geometry][1] | [Feature][2]\<any>)** 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

Expand Down
11 changes: 5 additions & 6 deletions packages/turf-boolean-disjoint/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { polygonToLine } from "@turf/polygon-to-line";
* @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry
* @param {Geometry|Feature<any>} 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]);
Expand All @@ -30,13 +30,12 @@ import { polygonToLine } from "@turf/polygon-to-line";
function booleanDisjoint(
feature1: Feature<any> | Geometry,
feature2: Feature<any> | Geometry,
options: {
{
ignoreSelfIntersections = true,
}: {
ignoreSelfIntersections?: boolean;
} = {}
} = { ignoreSelfIntersections: true }
): boolean {
const ignoreSelfIntersections: boolean =
options.ignoreSelfIntersections ?? false;

let bool = true;
flattenEach(feature1, (flatten1) => {
flattenEach(feature2, (flatten2) => {
Expand Down
79 changes: 55 additions & 24 deletions packages/turf-boolean-disjoint/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -117,64 +117,95 @@ test("turf-boolean-disjoin with ignoreSelfIntersections option", (t) => {
},
};

// Test without ignoringSelfIntersections option (default behavior)
const selfIntersectingPolygon: GeoJSON.Feature<GeoJSON.Polygon> = {
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();
Expand Down

0 comments on commit 5a9d40d

Please sign in to comment.