diff --git a/src/ol/geom/flatgeom.js b/src/ol/geom/flatgeom.js index 5310694a19..0b20b12f93 100644 --- a/src/ol/geom/flatgeom.js +++ b/src/ol/geom/flatgeom.js @@ -1,9 +1,79 @@ goog.provide('ol.geom.flat'); +goog.require('goog.asserts'); goog.require('goog.vec.Mat4'); goog.require('ol.geom.Geometry'); +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} coordinates Coordinates. + * @param {number} stride Stride. + * @return {number} offset Offset. + */ +ol.geom.flat.deflateCoordinates = + function(flatCoordinates, offset, coordinates, stride) { + var i, ii; + for (i = 0, ii = coordinates.length; i < ii; ++i) { + var coordinate = coordinates[i]; + goog.asserts.assert(coordinate.length == stride); + var j; + for (j = 0; j < stride; ++j) { + flatCoordinates[offset++] = coordinate[j]; + } + } + return offset; +}; + + +/** + * @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.flat.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.flat.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. + * @param {Array.>>} coordinatesss Coordinatesss. + * @param {number} stride Stride. + * @param {Array.>=} opt_endss Endss. + * @return {Array.>} Endss. + */ +ol.geom.flat.deflateCoordinatesss = + function(flatCoordinates, offset, coordinatesss, stride, opt_endss) { + var endss = goog.isDef(opt_endss) ? opt_endss : []; + var i = 0; + var j, jj; + for (j = 0, jj = coordinatesss.length; j < jj; ++j) { + var ends = ol.geom.flat.deflateCoordinatess( + flatCoordinates, offset, coordinatesss[j], stride, endss[i]); + endss[i++] = ends; + offset = ends[ends.length - 1]; + } + return endss; +}; + + /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} stride Stride. diff --git a/src/ol/geom/geometry.js b/src/ol/geom/geometry.js index d31c957fd9..6a0fa44329 100644 --- a/src/ol/geom/geometry.js +++ b/src/ol/geom/geometry.js @@ -261,75 +261,6 @@ ol.geom.RawMultiLineString; ol.geom.RawMultiPolygon; -/** - * @param {Array.} flatCoordinates Flat coordinates. - * @param {number} offset Offset. - * @param {Array.} coordinates Coordinates. - * @param {number} stride Stride. - * @return {number} offset Offset. - */ -ol.geom.deflateCoordinates = - function(flatCoordinates, offset, coordinates, stride) { - var i, ii; - for (i = 0, ii = coordinates.length; i < ii; ++i) { - var coordinate = coordinates[i]; - goog.asserts.assert(coordinate.length == stride); - var j; - for (j = 0; j < stride; ++j) { - flatCoordinates[offset++] = coordinate[j]; - } - } - return offset; -}; - - -/** - * @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. - * @param {Array.>>} coordinatesss Coordinatesss. - * @param {number} stride Stride. - * @param {Array.>=} opt_endss Endss. - * @return {Array.>} Endss. - */ -ol.geom.deflateCoordinatesss = - function(flatCoordinates, offset, coordinatesss, stride, opt_endss) { - var endss = goog.isDef(opt_endss) ? opt_endss : []; - var i = 0; - var j, jj; - for (j = 0, jj = coordinatesss.length; j < jj; ++j) { - var ends = ol.geom.deflateCoordinatess( - flatCoordinates, offset, coordinatesss[j], stride, endss[i]); - endss[i++] = ends; - offset = ends[ends.length - 1]; - } - return endss; -}; - - /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} offset Offset. diff --git a/src/ol/geom/linestring.js b/src/ol/geom/linestring.js index f0b32ae125..4341e63644 100644 --- a/src/ol/geom/linestring.js +++ b/src/ol/geom/linestring.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.LineString'); goog.require('ol.geom.Geometry'); +goog.require('ol.geom.flat'); @@ -41,6 +42,7 @@ ol.geom.LineString.prototype.getType = function() { ol.geom.LineString.prototype.setCoordinates = function(coordinates, opt_layout) { this.setLayout(opt_layout, coordinates, 1); - ol.geom.deflateCoordinates(this.flatCoordinates, 0, coordinates, this.stride); + ol.geom.flat.deflateCoordinates( + this.flatCoordinates, 0, coordinates, this.stride); this.dispatchChangeEvent(); }; diff --git a/src/ol/geom/multilinestring.js b/src/ol/geom/multilinestring.js index ef06708427..50259cb6ff 100644 --- a/src/ol/geom/multilinestring.js +++ b/src/ol/geom/multilinestring.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.MultiLineString'); goog.require('ol.geom.Geometry'); +goog.require('ol.geom.flat'); @@ -58,7 +59,7 @@ ol.geom.MultiLineString.prototype.getType = function() { ol.geom.MultiLineString.prototype.setCoordinates = function(coordinates, opt_layout) { this.setLayout(opt_layout, coordinates, 2); - ol.geom.deflateCoordinatess( + ol.geom.flat.deflateCoordinatess( this.flatCoordinates, 0, coordinates, this.stride, this.ends_); this.dispatchChangeEvent(); }; diff --git a/src/ol/geom/multipoint.js b/src/ol/geom/multipoint.js index f323e1da02..ce1ac23419 100644 --- a/src/ol/geom/multipoint.js +++ b/src/ol/geom/multipoint.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.MultiPoint'); goog.require('ol.geom.Geometry'); +goog.require('ol.geom.flat'); @@ -41,6 +42,7 @@ ol.geom.MultiPoint.prototype.getType = function() { ol.geom.MultiPoint.prototype.setCoordinates = function(coordinates, opt_layout) { this.setLayout(opt_layout, coordinates, 1); - ol.geom.deflateCoordinates(this.flatCoordinates, 0, coordinates, this.stride); + ol.geom.flat.deflateCoordinates( + this.flatCoordinates, 0, coordinates, this.stride); this.dispatchChangeEvent(); }; diff --git a/src/ol/geom/multipolygon.js b/src/ol/geom/multipolygon.js index c0587ab503..406202c97e 100644 --- a/src/ol/geom/multipolygon.js +++ b/src/ol/geom/multipolygon.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.MultiPolygon'); goog.require('ol.geom.Geometry'); +goog.require('ol.geom.flat'); @@ -67,7 +68,7 @@ ol.geom.MultiPolygon.prototype.getType = function() { ol.geom.MultiPolygon.prototype.setCoordinates = function(coordinates, opt_layout) { this.setLayout(opt_layout, coordinates, 3); - ol.geom.deflateCoordinatesss( + ol.geom.flat.deflateCoordinatesss( this.flatCoordinates, 0, coordinates, this.stride, this.endss_); ol.geom.orientFlatLinearRingss( this.flatCoordinates, 0, this.endss_, this.stride); diff --git a/src/ol/geom/polygon.js b/src/ol/geom/polygon.js index 965df227d8..f4caa11f16 100644 --- a/src/ol/geom/polygon.js +++ b/src/ol/geom/polygon.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.Polygon'); goog.require('ol.geom.Geometry'); +goog.require('ol.geom.flat'); @@ -67,7 +68,7 @@ ol.geom.Polygon.prototype.getType = function() { ol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) { this.setLayout(opt_layout, coordinates, 2); - ol.geom.deflateCoordinatess( + ol.geom.flat.deflateCoordinatess( this.flatCoordinates, 0, coordinates, this.stride, this.ends_); ol.geom.orientFlatLinearRings( this.flatCoordinates, 0, this.ends_, this.stride); diff --git a/test/spec/ol/geom/geom.test.js b/test/spec/ol/geom/geom.test.js index 1c7c8749ef..c34de4331a 100644 --- a/test/spec/ol/geom/geom.test.js +++ b/test/spec/ol/geom/geom.test.js @@ -3,7 +3,7 @@ goog.provide('ol.test.geom'); describe('ol.geom', function() { - describe('ol.geom.deflateCoordinates', function() { + describe('ol.geom.flat.deflateCoordinates', function() { var flatCoordinates; beforeEach(function() { @@ -11,7 +11,7 @@ describe('ol.geom', function() { }); it('flattens coordinates', function() { - var offset = ol.geom.deflateCoordinates( + var offset = ol.geom.flat.deflateCoordinates( flatCoordinates, 0, [[1, 2], [3, 4]], 2); expect(offset).to.be(4); expect(flatCoordinates).to.eql([1, 2, 3, 4]); @@ -19,7 +19,7 @@ describe('ol.geom', function() { }); - describe('ol.geom.deflateCoordinatess', function() { + describe('ol.geom.flat.deflateCoordinatess', function() { var flatCoordinates; beforeEach(function() { @@ -27,7 +27,7 @@ describe('ol.geom', function() { }); it('flattens arrays of coordinates', function() { - var ends = ol.geom.deflateCoordinatess(flatCoordinates, 0, + var ends = ol.geom.flat.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]); @@ -196,3 +196,6 @@ describe('ol.geom', function() { }); }); + + +goog.require('ol.geom.flat');