From 857c28a88b59db293e1a711ef4330e364ab83f6c Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Tue, 12 Nov 2013 12:40:06 +0100 Subject: [PATCH] Move ol.geom.flatLinearRingContains to ol.geom.flat --- src/ol/geom/flatgeom.js | 88 +++++++++++++++++++++++++++++++++++++ src/ol/geom/geometry.js | 88 ------------------------------------- src/ol/geom/multipolygon.js | 2 +- src/ol/geom/polygon.js | 2 +- 4 files changed, 90 insertions(+), 90 deletions(-) diff --git a/src/ol/geom/flatgeom.js b/src/ol/geom/flatgeom.js index 678298c3b4..d9bf1489d8 100644 --- a/src/ol/geom/flatgeom.js +++ b/src/ol/geom/flatgeom.js @@ -143,6 +143,94 @@ ol.geom.flat.inflateCoordinatesss = }; +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} x X. + * @param {number} y Y. + * @return {boolean} Contains (x, y). + */ +ol.geom.flat.linearRingContainsXY = + function(flatCoordinates, offset, end, stride, x, y) { + // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html + var contains = false; + var xi = flatCoordinates[offset]; + var yi = flatCoordinates[offset + 1]; + for (offset += stride; offset < end; offset += stride) { + var xj = flatCoordinates[offset]; + var yj = flatCoordinates[offset + 1]; + var intersect = ((yi > y) != (yj > y)) && + (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + if (intersect) { + contains = !contains; + } + xi = xj; + yi = yj; + } + return contains; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {number} x X. + * @param {number} y Y. + * @return {boolean} Contains (x, y). + */ +ol.geom.flat.linearRingsContainsXY = + function(flatCoordinates, offset, ends, stride, x, y) { + goog.asserts.assert(ends.length > 0); + if (ends.length === 0) { + return false; + } + if (!ol.geom.flat.linearRingContainsXY( + flatCoordinates, offset, ends[0], stride, x, y)) { + return false; + } + var i, ii; + for (i = 1, ii = ends.length; i < ii; ++i) { + if (ol.geom.flat.linearRingContainsXY( + flatCoordinates, ends[i - 1], ends[i], stride, x, y)) { + return false; + } + } + return true; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {number} x X. + * @param {number} y Y. + * @return {boolean} Contains (x, y). + */ +ol.geom.flat.linearRingssContainsXY = + function(flatCoordinates, offset, endss, stride, x, y) { + goog.asserts.assert(endss.length > 0); + if (endss.length === 0) { + return false; + } + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + if (ol.geom.flat.linearRingsContainsXY( + flatCoordinates, offset, ends, stride, x, y)) { + return true; + } + offset = ends[ends.length - 1]; + } + return false; +}; + + /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} offset Offset. diff --git a/src/ol/geom/geometry.js b/src/ol/geom/geometry.js index c627b7a925..4a1f5e7946 100644 --- a/src/ol/geom/geometry.js +++ b/src/ol/geom/geometry.js @@ -262,36 +262,6 @@ ol.geom.RawMultiLineString; ol.geom.RawMultiPolygon; -/** - * @param {Array.} flatCoordinates Flat coordinates. - * @param {number} offset Offset. - * @param {number} end End. - * @param {number} stride Stride. - * @param {number} x X. - * @param {number} y Y. - * @return {boolean} Contains (x, y). - */ -ol.geom.flatLinearRingContainsXY = - function(flatCoordinates, offset, end, stride, x, y) { - // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html - var contains = false; - var xi = flatCoordinates[offset]; - var yi = flatCoordinates[offset + 1]; - for (offset += stride; offset < end; offset += stride) { - var xj = flatCoordinates[offset]; - var yj = flatCoordinates[offset + 1]; - var intersect = ((yi > y) != (yj > y)) && - (x < (xj - xi) * (y - yi) / (yj - yi) + xi); - if (intersect) { - contains = !contains; - } - xi = xj; - yi = yj; - } - return contains; -}; - - /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} offset Offset. @@ -317,64 +287,6 @@ ol.geom.flatLinearRingIsClockwise = }; -/** - * @param {Array.} flatCoordinates Flat coordinates. - * @param {number} offset Offset. - * @param {Array.} ends Ends. - * @param {number} stride Stride. - * @param {number} x X. - * @param {number} y Y. - * @return {boolean} Contains (x, y). - */ -ol.geom.flatLinearRingsContainsXY = - function(flatCoordinates, offset, ends, stride, x, y) { - goog.asserts.assert(ends.length > 0); - if (ends.length === 0) { - return false; - } - if (!ol.geom.flatLinearRingContainsXY( - flatCoordinates, offset, ends[0], stride, x, y)) { - return false; - } - var i, ii; - for (i = 1, ii = ends.length; i < ii; ++i) { - if (ol.geom.flatLinearRingContainsXY( - flatCoordinates, ends[i - 1], ends[i], stride, x, y)) { - return false; - } - } - return true; -}; - - -/** - * @param {Array.} flatCoordinates Flat coordinates. - * @param {number} offset Offset. - * @param {Array.>} endss Endss. - * @param {number} stride Stride. - * @param {number} x X. - * @param {number} y Y. - * @return {boolean} Contains (x, y). - */ -ol.geom.flatLinearRingssContainsXY = - function(flatCoordinates, offset, endss, stride, x, y) { - goog.asserts.assert(endss.length > 0); - if (endss.length === 0) { - return false; - } - var i, ii; - for (i = 0, ii = endss.length; i < ii; ++i) { - var ends = endss[i]; - if (ol.geom.flatLinearRingsContainsXY( - flatCoordinates, offset, ends, stride, x, y)) { - return true; - } - offset = ends[ends.length - 1]; - } - return false; -}; - - /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} offset Offset. diff --git a/src/ol/geom/multipolygon.js b/src/ol/geom/multipolygon.js index c9e5a68f84..218d4b8983 100644 --- a/src/ol/geom/multipolygon.js +++ b/src/ol/geom/multipolygon.js @@ -31,7 +31,7 @@ goog.inherits(ol.geom.MultiPolygon, ol.geom.Geometry); * @inheritDoc */ ol.geom.MultiPolygon.prototype.containsXY = function(x, y) { - return ol.geom.flatLinearRingssContainsXY( + return ol.geom.flat.linearRingssContainsXY( this.flatCoordinates, 0, this.endss_, this.stride, x, y); }; diff --git a/src/ol/geom/polygon.js b/src/ol/geom/polygon.js index 12ca15dcf2..2efb9e9f34 100644 --- a/src/ol/geom/polygon.js +++ b/src/ol/geom/polygon.js @@ -31,7 +31,7 @@ goog.inherits(ol.geom.Polygon, ol.geom.Geometry); * @inheritDoc */ ol.geom.Polygon.prototype.containsXY = function(x, y) { - return ol.geom.flatLinearRingsContainsXY( + return ol.geom.flat.linearRingsContainsXY( this.flatCoordinates, 0, this.ends_, this.stride, x, y); };