diff --git a/doc/ol3.md b/doc/ol3.md index ac97f47055..491f52945e 100644 --- a/doc/ol3.md +++ b/doc/ol3.md @@ -126,6 +126,9 @@ TileCoord clone() -> TileCoord getHash() -> number +TileBounds + forEachTileCoord(z, function(tileCoord)) + Tile tileCoord TileCoord url string diff --git a/src/ol/tilebounds.js b/src/ol/tilebounds.js index fbf61b7de4..13d4884ebb 100644 --- a/src/ol/tilebounds.js +++ b/src/ol/tilebounds.js @@ -25,6 +25,29 @@ ol.TileBounds = function(top, right, bottom, left) { goog.inherits(ol.TileBounds, goog.math.Box); +/** + * @param {number} z Z. + * @param {function(this: T, ol.TileCoord): boolean} f Callback. + * @param {T=} opt_obj The object to be used for the value of 'this' within f. + */ +ol.TileBounds.prototype.forEachTileCoord = function(z, f, opt_obj) { + var tileCoord = new ol.TileCoord(z, 0, 0); + var x, y; + for (x = this.left; x <= this.right; ++x) { + tileCoord.x = x; + for (y = this.top; y <= this.bottom; ++y) { + tileCoord.y = y; + if (f.call(opt_obj, tileCoord)) { + return; + } + goog.asserts.assert(tileCoord.z == z); + goog.asserts.assert(tileCoord.x == x); + goog.asserts.assert(tileCoord.y == y); + } + } +}; + + /** * @param {...ol.TileCoord} var_args Tile coordinates. * @return {!ol.TileBounds} Bounding tile box. diff --git a/src/ol/tilebounds_test.js b/src/ol/tilebounds_test.js index 842eb1ab34..a07fd785ec 100644 --- a/src/ol/tilebounds_test.js +++ b/src/ol/tilebounds_test.js @@ -34,3 +34,33 @@ function testBoundingTileBoundsMixedZ() { new ol.TileCoord(4, 2, 0)); }); } + + +function testForEachTileCoord() { + + var tileBounds = new ol.TileBounds(2, 1, 3, 0); + + var tileCoords = []; + tileBounds.forEachTileCoord(5, function(tileCoord) { + tileCoords.push(tileCoord.clone()); + }); + + assertEquals(4, tileCoords.length); + + assertEquals(5, tileCoords[0].z); + assertEquals(0, tileCoords[0].x); + assertEquals(2, tileCoords[0].y); + + assertEquals(5, tileCoords[1].z); + assertEquals(0, tileCoords[1].x); + assertEquals(3, tileCoords[1].y); + + assertEquals(5, tileCoords[2].z); + assertEquals(1, tileCoords[2].x); + assertEquals(2, tileCoords[2].y); + + assertEquals(5, tileCoords[3].z); + assertEquals(1, tileCoords[3].x); + assertEquals(3, tileCoords[3].y); + +}