From 7ec19645e960bce8aa91355677ae102680062a3d Mon Sep 17 00:00:00 2001 From: Hermes David Junior Date: Mon, 15 Oct 2018 10:00:37 -0400 Subject: [PATCH] Polygon intersectsExtent failure - Issue #8795 --- src/ol/geom/flat/intersectsextent.js | 4 ++- .../ol/geom/flat/intersectsextent.test.js | 28 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/ol/geom/flat/intersectsextent.js b/src/ol/geom/flat/intersectsextent.js index 423005cbec..4c26b4d791 100644 --- a/src/ol/geom/flat/intersectsextent.js +++ b/src/ol/geom/flat/intersectsextent.js @@ -111,7 +111,9 @@ export function intersectsLinearRingArray(flatCoordinates, offset, ends, stride, } for (let i = 1, ii = ends.length; i < ii; ++i) { if (linearRingContainsExtent(flatCoordinates, ends[i - 1], ends[i], stride, extent)) { - return false; + if (!intersectsLineString(flatCoordinates, ends[i - 1], ends[i], stride, extent)) { + return false; + } } } return true; diff --git a/test/spec/ol/geom/flat/intersectsextent.test.js b/test/spec/ol/geom/flat/intersectsextent.test.js index 0e7927fadb..141acce5d1 100644 --- a/test/spec/ol/geom/flat/intersectsextent.test.js +++ b/test/spec/ol/geom/flat/intersectsextent.test.js @@ -1,4 +1,4 @@ -import {intersectsLinearRing, intersectsLineString} from '../../../../../src/ol/geom/flat/intersectsextent.js'; +import {intersectsLinearRing, intersectsLineString, intersectsLinearRingArray} from '../../../../../src/ol/geom/flat/intersectsextent.js'; describe('ol.geom.flat.intersectsextent', function() { @@ -89,4 +89,30 @@ describe('ol.geom.flat.intersectsextent', function() { }); }); }); + + describe('ol.geom.flat.intersectsextent.intersectsLinearRingArray', function() { + let flatCoordinates; + let ends; + beforeEach(function() { + flatCoordinates = [0, 0, 0, 10, 10, 10, 10, 0, 0, 0, /*hole*/2, 2, 8, 2, 8, 4, 5, 5, 8, 6, 8, 8, 2, 8, 2, 2]; + ends = [10, flatCoordinates.length]; + }); + describe('ring with hole where hole contains the extent', function() { + it('returns true', function() { + const extent = [3, 3, 3.5, 3.5]; + const r = intersectsLinearRingArray( + flatCoordinates, 0, ends, 2, extent); + expect(r).to.be(false); + }); + }); + describe('ring with hole intersects the extent', function() { + it('returns true', function() { + const extent = [3, 3, 6, 6]; + const r = intersectsLinearRingArray( + flatCoordinates, 0, ends, 2, extent); + expect(r).to.be(true); + }); + }); + }); + });