From a1b1483d3e89eb6bc213b049cd13d7b07ac6c0b5 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sun, 1 Dec 2013 18:20:14 +0100 Subject: [PATCH] Add ol.geom.flat.linearRingssMidYs --- src/ol/geom/flatgeom.js | 63 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/src/ol/geom/flatgeom.js b/src/ol/geom/flatgeom.js index f39a7fc743..9cfab1b0a3 100644 --- a/src/ol/geom/flatgeom.js +++ b/src/ol/geom/flatgeom.js @@ -278,6 +278,25 @@ ol.geom.flat.linearRingIsClockwise = }; +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @return {number} Mid Y. + */ +ol.geom.flat.linearRingMidY = function(flatCoordinates, offset, end, stride) { + var minY = Infinity; + var maxY = -Infinity; + for (; offset < end; offset += stride) { + var y = flatCoordinates[offset + 1]; + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + return (minY + maxY) / 2; +}; + + /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} offset Offset. @@ -416,6 +435,50 @@ ol.geom.flat.linearRingssContainsXY = }; +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {Array.} ys Ys. + * @return {Array.} Mid Ys. + */ +ol.geom.flat.linearRingssGetInteriorPoints = + function(flatCoordinates, offset, endss, stride, ys) { + goog.asserts.assert(endss.length == ys.length); + var points = []; + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + points.push(ol.geom.flat.linearRingsGetInteriorPoint( + flatCoordinates, offset, ends, stride, ys[i])); + offset = ends[ends.length - 1]; + } + return points; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @return {Array.} Mid Ys. + */ +ol.geom.flat.linearRingssMidYs = + function(flatCoordinates, offset, endss, stride) { + var midYs = []; + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + midYs.push( + ol.geom.flat.linearRingMidY(flatCoordinates, offset, ends[0], stride)); + offset = ends[ends.length - 1]; + } + return midYs; +}; + + /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} offset Offset.