From 3541a01aab1b124d011b1a53b922be207b4c3c37 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 12 Mar 2014 12:59:40 +0100 Subject: [PATCH] Factor out ol.geom.flat.inflate --- src/ol/format/polylineformat.js | 4 +- src/ol/geom/flat/inflateflatgeom.js | 71 +++++++++++++++++++ src/ol/geom/flatgeom.js | 70 ------------------ src/ol/geom/linearring.js | 3 +- src/ol/geom/linestring.js | 3 +- src/ol/geom/multilinestring.js | 3 +- src/ol/geom/multipoint.js | 3 +- src/ol/geom/multipolygon.js | 3 +- src/ol/geom/polygon.js | 3 +- .../spec/ol/geom/flat/inflateflatgeom.test.js | 27 +++++++ test/spec/ol/geom/flatgeom.test.js | 19 ----- 11 files changed, 112 insertions(+), 97 deletions(-) create mode 100644 src/ol/geom/flat/inflateflatgeom.js create mode 100644 test/spec/ol/geom/flat/inflateflatgeom.test.js diff --git a/src/ol/format/polylineformat.js b/src/ol/format/polylineformat.js index a376e827ec..8cdbe55755 100644 --- a/src/ol/format/polylineformat.js +++ b/src/ol/format/polylineformat.js @@ -4,7 +4,7 @@ goog.require('goog.asserts'); goog.require('ol.Feature'); goog.require('ol.format.TextFeature'); goog.require('ol.geom.LineString'); -goog.require('ol.geom.flat'); +goog.require('ol.geom.flat.inflate'); goog.require('ol.proj'); @@ -279,7 +279,7 @@ ol.format.Polyline.prototype.readFeaturesFromText = function(text) { */ ol.format.Polyline.prototype.readGeometryFromText = function(text) { var flatCoordinates = ol.format.Polyline.decodeFlatCoordinates(text, 2); - var coordinates = ol.geom.flat.inflateCoordinates( + var coordinates = ol.geom.flat.inflate.coordinates( flatCoordinates, 0, flatCoordinates.length, 2); return new ol.geom.LineString(coordinates); }; diff --git a/src/ol/geom/flat/inflateflatgeom.js b/src/ol/geom/flat/inflateflatgeom.js new file mode 100644 index 0000000000..53c4620c3f --- /dev/null +++ b/src/ol/geom/flat/inflateflatgeom.js @@ -0,0 +1,71 @@ +goog.provide('ol.geom.flat.inflate'); + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {Array.=} opt_coordinates Coordinates. + * @return {Array.} Coordinates. + */ +ol.geom.flat.inflate.coordinates = + function(flatCoordinates, offset, end, stride, opt_coordinates) { + var coordinates = goog.isDef(opt_coordinates) ? opt_coordinates : []; + var i = 0; + var j; + for (j = offset; j < end; j += stride) { + coordinates[i++] = flatCoordinates.slice(j, j + stride); + } + 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.flat.inflate.coordinatess = + 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.flat.inflate.coordinates( + flatCoordinates, offset, end, stride, coordinatess[i]); + offset = end; + } + coordinatess.length = i; + return coordinatess; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {Array.>>=} opt_coordinatesss + * Coordinatesss. + * @return {Array.>>} Coordinatesss. + */ +ol.geom.flat.inflate.coordinatesss = + function(flatCoordinates, offset, endss, stride, opt_coordinatesss) { + var coordinatesss = goog.isDef(opt_coordinatesss) ? opt_coordinatesss : []; + var i = 0; + var j, jj; + for (j = 0, jj = endss.length; j < jj; ++j) { + var ends = endss[j]; + coordinatesss[i++] = ol.geom.flat.inflate.coordinatess( + flatCoordinates, offset, ends, stride, coordinatesss[i]); + offset = ends[ends.length - 1]; + } + coordinatesss.length = i; + return coordinatesss; +}; diff --git a/src/ol/geom/flatgeom.js b/src/ol/geom/flatgeom.js index 4cd28319b3..d9d7fbe867 100644 --- a/src/ol/geom/flatgeom.js +++ b/src/ol/geom/flatgeom.js @@ -5,76 +5,6 @@ goog.require('goog.vec.Mat4'); goog.require('ol.extent'); -/** - * @param {Array.} flatCoordinates Flat coordinates. - * @param {number} offset Offset. - * @param {number} end End. - * @param {number} stride Stride. - * @param {Array.=} opt_coordinates Coordinates. - * @return {Array.} Coordinates. - */ -ol.geom.flat.inflateCoordinates = - function(flatCoordinates, offset, end, stride, opt_coordinates) { - var coordinates = goog.isDef(opt_coordinates) ? opt_coordinates : []; - var i = 0; - var j; - for (j = offset; j < end; j += stride) { - coordinates[i++] = flatCoordinates.slice(j, j + stride); - } - 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.flat.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.flat.inflateCoordinates( - flatCoordinates, offset, end, stride, coordinatess[i]); - offset = end; - } - coordinatess.length = i; - return coordinatess; -}; - - -/** - * @param {Array.} flatCoordinates Flat coordinates. - * @param {number} offset Offset. - * @param {Array.>} endss Endss. - * @param {number} stride Stride. - * @param {Array.>>=} opt_coordinatesss - * Coordinatesss. - * @return {Array.>>} Coordinatesss. - */ -ol.geom.flat.inflateCoordinatesss = - function(flatCoordinates, offset, endss, stride, opt_coordinatesss) { - var coordinatesss = goog.isDef(opt_coordinatesss) ? opt_coordinatesss : []; - var i = 0; - var j, jj; - for (j = 0, jj = endss.length; j < jj; ++j) { - var ends = endss[j]; - coordinatesss[i++] = ol.geom.flat.inflateCoordinatess( - flatCoordinates, offset, ends, stride, coordinatesss[i]); - offset = ends[ends.length - 1]; - } - coordinatesss.length = i; - return coordinatesss; -}; - - /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} offset Offset. diff --git a/src/ol/geom/linearring.js b/src/ol/geom/linearring.js index e6a101243f..034b98b520 100644 --- a/src/ol/geom/linearring.js +++ b/src/ol/geom/linearring.js @@ -7,6 +7,7 @@ goog.require('ol.geom.flat'); goog.require('ol.geom.flat.area'); goog.require('ol.geom.flat.closest'); goog.require('ol.geom.flat.deflate'); +goog.require('ol.geom.flat.inflate'); goog.require('ol.geom.flat.simplify'); @@ -85,7 +86,7 @@ ol.geom.LinearRing.prototype.getArea = function() { * @todo stability experimental */ ol.geom.LinearRing.prototype.getCoordinates = function() { - return ol.geom.flat.inflateCoordinates( + return ol.geom.flat.inflate.coordinates( this.flatCoordinates, 0, this.flatCoordinates.length, this.stride); }; diff --git a/src/ol/geom/linestring.js b/src/ol/geom/linestring.js index b04ec06657..cc41ed8b38 100644 --- a/src/ol/geom/linestring.js +++ b/src/ol/geom/linestring.js @@ -8,6 +8,7 @@ goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.flat'); goog.require('ol.geom.flat.closest'); goog.require('ol.geom.flat.deflate'); +goog.require('ol.geom.flat.inflate'); goog.require('ol.geom.flat.interpolate'); goog.require('ol.geom.flat.length'); goog.require('ol.geom.flat.simplify'); @@ -128,7 +129,7 @@ ol.geom.LineString.prototype.getCoordinateAtM = function(m, opt_extrapolate) { * @todo stability experimental */ ol.geom.LineString.prototype.getCoordinates = function() { - return ol.geom.flat.inflateCoordinates( + return ol.geom.flat.inflate.coordinates( this.flatCoordinates, 0, this.flatCoordinates.length, this.stride); }; diff --git a/src/ol/geom/multilinestring.js b/src/ol/geom/multilinestring.js index c35491c2ef..e67178979e 100644 --- a/src/ol/geom/multilinestring.js +++ b/src/ol/geom/multilinestring.js @@ -9,6 +9,7 @@ goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.flat'); goog.require('ol.geom.flat.closest'); goog.require('ol.geom.flat.deflate'); +goog.require('ol.geom.flat.inflate'); goog.require('ol.geom.flat.interpolate'); goog.require('ol.geom.flat.simplify'); @@ -136,7 +137,7 @@ ol.geom.MultiLineString.prototype.getCoordinateAtM = * @todo stability experimental */ ol.geom.MultiLineString.prototype.getCoordinates = function() { - return ol.geom.flat.inflateCoordinatess( + return ol.geom.flat.inflate.coordinatess( this.flatCoordinates, 0, this.ends_, this.stride); }; diff --git a/src/ol/geom/multipoint.js b/src/ol/geom/multipoint.js index e100073843..a9a0ffddf1 100644 --- a/src/ol/geom/multipoint.js +++ b/src/ol/geom/multipoint.js @@ -8,6 +8,7 @@ goog.require('ol.geom.Point'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.flat'); goog.require('ol.geom.flat.deflate'); +goog.require('ol.geom.flat.inflate'); @@ -81,7 +82,7 @@ ol.geom.MultiPoint.prototype.closestPointXY = * @todo stability experimental */ ol.geom.MultiPoint.prototype.getCoordinates = function() { - return ol.geom.flat.inflateCoordinates( + return ol.geom.flat.inflate.coordinates( this.flatCoordinates, 0, this.flatCoordinates.length, this.stride); }; diff --git a/src/ol/geom/multipolygon.js b/src/ol/geom/multipolygon.js index 8fb2790e1a..e2197e32c2 100644 --- a/src/ol/geom/multipolygon.js +++ b/src/ol/geom/multipolygon.js @@ -12,6 +12,7 @@ goog.require('ol.geom.flat.area'); goog.require('ol.geom.flat.closest'); goog.require('ol.geom.flat.contains'); goog.require('ol.geom.flat.deflate'); +goog.require('ol.geom.flat.inflate'); goog.require('ol.geom.flat.interiorpoint'); goog.require('ol.geom.flat.orient'); goog.require('ol.geom.flat.simplify'); @@ -157,7 +158,7 @@ ol.geom.MultiPolygon.prototype.getArea = function() { * @todo stability experimental */ ol.geom.MultiPolygon.prototype.getCoordinates = function() { - return ol.geom.flat.inflateCoordinatesss( + return ol.geom.flat.inflate.coordinatesss( this.flatCoordinates, 0, this.endss_, this.stride); }; diff --git a/src/ol/geom/polygon.js b/src/ol/geom/polygon.js index 7b79f55182..a8a633c4b0 100644 --- a/src/ol/geom/polygon.js +++ b/src/ol/geom/polygon.js @@ -12,6 +12,7 @@ goog.require('ol.geom.flat.area'); goog.require('ol.geom.flat.closest'); goog.require('ol.geom.flat.contains'); goog.require('ol.geom.flat.deflate'); +goog.require('ol.geom.flat.inflate'); goog.require('ol.geom.flat.interiorpoint'); goog.require('ol.geom.flat.orient'); goog.require('ol.geom.flat.simplify'); @@ -147,7 +148,7 @@ ol.geom.Polygon.prototype.getArea = function() { * @todo stability experimental */ ol.geom.Polygon.prototype.getCoordinates = function() { - return ol.geom.flat.inflateCoordinatess( + return ol.geom.flat.inflate.coordinatess( this.flatCoordinates, 0, this.ends_, this.stride); }; diff --git a/test/spec/ol/geom/flat/inflateflatgeom.test.js b/test/spec/ol/geom/flat/inflateflatgeom.test.js new file mode 100644 index 0000000000..fd6c4eb1e0 --- /dev/null +++ b/test/spec/ol/geom/flat/inflateflatgeom.test.js @@ -0,0 +1,27 @@ +goog.provide('ol.test.geom.flat.inflate'); + +describe('ol.geom.flat.inflate', function() { + + describe('ol.geom.flat.inflate.coordinates', function() { + + it('inflates coordinates', function() { + var coordinates = ol.geom.flat.inflate.coordinates([1, 2, 3, 4], 0, 4, 2); + expect(coordinates).to.eql([[1, 2], [3, 4]]); + }); + + }); + + describe('ol.geom.flat.inflate.coordinatess', function() { + + it('inflates arrays of coordinates', function() { + var coordinatess = ol.geom.flat.inflate.coordinatess( + [1, 2, 3, 4, 5, 6, 7, 8], 0, [4, 8], 2); + expect(coordinatess).to.eql([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]); + }); + + }); + +}); + +goog.require('ol.geom.flat'); +goog.require('ol.geom.flat.inflate'); diff --git a/test/spec/ol/geom/flatgeom.test.js b/test/spec/ol/geom/flatgeom.test.js index 927a56e04c..709080987d 100644 --- a/test/spec/ol/geom/flatgeom.test.js +++ b/test/spec/ol/geom/flatgeom.test.js @@ -3,25 +3,6 @@ goog.provide('ol.test.geom.flat'); describe('ol.geom.flat', function() { - describe('ol.geom.flat.inflateCoordinates', function() { - - it('inflates coordinates', function() { - var coordinates = ol.geom.flat.inflateCoordinates([1, 2, 3, 4], 0, 4, 2); - expect(coordinates).to.eql([[1, 2], [3, 4]]); - }); - - }); - - describe('ol.geom.flat.inflateCoordinatess', function() { - - it('inflates arrays of coordinates', function() { - var coordinatess = ol.geom.flat.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]]]); - }); - - }); - describe('ol.geom.flat.reverseCoordinates', function() { describe('with a stride of 2', function() {