From 5771057ae18d2fc5c49ea750a427331c447637a6 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sun, 24 Mar 2013 13:46:23 +0100 Subject: [PATCH] Reuse ol.TileRange object in forEachTileCoordParentTileRange --- src/ol/tilegrid/xyztilegrid.js | 17 +++++------------ src/ol/tilerange.js | 8 ++++++++ test/spec/ol/source/xyz.test.js | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/ol/tilegrid/xyztilegrid.js b/src/ol/tilegrid/xyztilegrid.js index 25270ec0eb..985bf67001 100644 --- a/src/ol/tilegrid/xyztilegrid.js +++ b/src/ol/tilegrid/xyztilegrid.js @@ -39,18 +39,11 @@ goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid); */ ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_obj) { - var x = tileCoord.x; - var y = tileCoord.y; - var z = tileCoord.z; - var tileRange; - while (true) { - z -= 1; - if (z < 0) { - break; - } - x >>= 1; - y >>= 1; - tileRange = new ol.TileRange(x, y, x, y); + var tileRange = new ol.TileRange(0, 0, tileCoord.x, tileCoord.y); + var z; + for (z = tileCoord.z - 1; z >= 0; --z) { + tileRange.minX = tileRange.maxX >>= 1; + tileRange.minY = tileRange.maxY >>= 1; if (callback.call(opt_obj, z, tileRange)) { break; } diff --git a/src/ol/tilerange.js b/src/ol/tilerange.js index 76d3d7437c..ad788a7736 100644 --- a/src/ol/tilerange.js +++ b/src/ol/tilerange.js @@ -64,6 +64,14 @@ ol.TileRange.boundingTileRange = function(var_args) { }; +/** + * @return {ol.TileRange} Clone. + */ +ol.TileRange.prototype.clone = function() { + return new ol.TileRange(this.minX, this.minY, this.maxX, this.maxY); +}; + + /** * @param {ol.TileCoord} tileCoord Tile coordinate. * @return {boolean} Contains tile coordinate. diff --git a/test/spec/ol/source/xyz.test.js b/test/spec/ol/source/xyz.test.js index fd7560f566..5b143beb0d 100644 --- a/test/spec/ol/source/xyz.test.js +++ b/test/spec/ol/source/xyz.test.js @@ -86,7 +86,7 @@ describe('ol.source.XYZ', function() { tileCoord, function(z, tileRange) { zs.push(z); - tileRanges.push(tileRange); + tileRanges.push(tileRange.clone()); return false; });