diff --git a/src/ol/geom/geometry.js b/src/ol/geom/geometry.js index 0e5c95944f..1eea2e950a 100644 --- a/src/ol/geom/geometry.js +++ b/src/ol/geom/geometry.js @@ -264,6 +264,30 @@ ol.geom.deflateCoordinates = }; +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} coordinatess Coordinatess. + * @param {number} stride Stride. + * @param {Array.=} opt_ends Ends. + * @return {Array.} Ends. + */ +ol.geom.deflateCoordinatess = + function(flatCoordinates, offset, coordinatess, stride, opt_ends) { + var ends = goog.isDef(opt_ends) ? opt_ends : []; + var i = 0; + var j, jj; + for (j = 0, jj = coordinatess.length; j < jj; ++j) { + var end = ol.geom.deflateCoordinates( + flatCoordinates, offset, coordinatess[j], stride); + ends[i++] = end; + offset = end; + } + ends.length = i; + return ends; +}; + + /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} offset Offset. @@ -283,3 +307,27 @@ ol.geom.inflateCoordinates = coordinates.length = i; return coordinates; }; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {Array.>=} opt_coordinatess Coordinatess. + * @return {Array.>} Coordinatess. + */ +ol.geom.inflateCoordinatess = + function(flatCoordinates, offset, ends, stride, opt_coordinatess) { + var coordinatess = goog.isDef(opt_coordinatess) ? opt_coordinatess : []; + var i = 0; + var j, jj; + for (j = 0, jj = ends.length; j < jj; ++j) { + var end = ends[j]; + coordinatess[i++] = ol.geom.inflateCoordinates( + flatCoordinates, offset, end, stride, coordinatess[i]); + offset = end; + } + coordinatess.length = i; + return coordinatess; +}; diff --git a/test/spec/ol/geom/geom.test.js b/test/spec/ol/geom/geom.test.js index c64a21ee83..8c86156997 100644 --- a/test/spec/ol/geom/geom.test.js +++ b/test/spec/ol/geom/geom.test.js @@ -19,6 +19,21 @@ describe('ol.geom', function() { }); + describe('ol.geom.deflateCoordinatess', function() { + + var flatCoordinates; + beforeEach(function() { + flatCoordinates = []; + }); + + it('flattens arrays of coordinates', function() { + var ends = ol.geom.deflateCoordinatess(flatCoordinates, 0, + [[[1, 2], [3, 4]], [[5, 6], [7, 8]]], 2); + expect(ends).to.eql([4, 8]); + expect(flatCoordinates).to.eql([1, 2, 3, 4, 5, 6, 7, 8]); + }); + }); + describe('ol.geom.inflateCoordinates', function() { it('inflates coordinates', function() { @@ -28,4 +43,13 @@ describe('ol.geom', function() { }); + describe('ol.geom.inflateCoordinatess', function() { + + it('inflates arrays of coordinates', function() { + var coordinatess = ol.geom.inflateCoordinatess([1, 2, 3, 4, 5, 6, 7, 8], + 0, [4, 8], 2); + expect(coordinatess).to.eql([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]); + }); + }); + });