From 14cecb71631abe50311c4aab5401c6e1d290f4af Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 22 Jun 2016 18:01:29 +0200 Subject: [PATCH 1/2] Add function to iterate over tile coordinates in extent and z --- src/ol/tilegrid/tilegrid.js | 18 ++++++++++++++++++ test/spec/ol/tilegrid/tilegrid.test.js | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/ol/tilegrid/tilegrid.js b/src/ol/tilegrid/tilegrid.js index d843e9c614..c042ef5baf 100644 --- a/src/ol/tilegrid/tilegrid.js +++ b/src/ol/tilegrid/tilegrid.js @@ -150,6 +150,24 @@ ol.tilegrid.TileGrid = function(options) { ol.tilegrid.TileGrid.tmpTileCoord_ = [0, 0, 0]; +/** + * Call a function with each tile coordinate for a given extent and zoom level. + * + * @param {ol.Extent} extent Extent. + * @param {number} zoom Zoom level. + * @param {function(ol.TileCoord)} callback Function called with each tile coordinate. + * @api + */ +ol.tilegrid.TileGrid.prototype.forEachTileCoordInExtentAndZ = function(extent, zoom, callback) { + var tileRange = this.getTileRangeForExtentAndZ(extent, zoom); + for (var i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) { + for (var j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) { + callback([zoom, i, j]); + } + } +}; + + /** * @param {ol.TileCoord} tileCoord Tile coordinate. * @param {function(this: T, number, ol.TileRange): boolean} callback Callback. diff --git a/test/spec/ol/tilegrid/tilegrid.test.js b/test/spec/ol/tilegrid/tilegrid.test.js index 41d890a401..e9294c64f4 100644 --- a/test/spec/ol/tilegrid/tilegrid.test.js +++ b/test/spec/ol/tilegrid/tilegrid.test.js @@ -949,6 +949,22 @@ describe('ol.tilegrid.TileGrid', function() { }); + describe('forEachTileCoordInExtentAndZ', function() { + it('calls the provided function with each tile coordinate', function() { + var tileGrid = ol.tilegrid.createXYZ({extent: [-180, -90, 180, 90]}); + var tileCoords = []; + tileGrid.forEachTileCoordInExtentAndZ([15, 47, 16, 48], 8, function(tileCoord) { + tileCoords.push(tileCoord); + }); + expect(tileCoords).to.eql([ + [8, 138, -31], + [8, 138, -30], + [8, 139, -31], + [8, 139, -30] + ]); + }); + }); + describe('forEachTileCoordParentTileRange', function() { it('iterates as expected', function() { var tileGrid = new ol.tilegrid.TileGrid({ From 4b7cdffaf45950a396b748d7d4906c400c803466 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 22 Jun 2016 08:45:17 +0200 Subject: [PATCH 2/2] Export getZForResolution from ol.tilegrid.TileGrid --- src/ol/tilegrid/tilegrid.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ol/tilegrid/tilegrid.js b/src/ol/tilegrid/tilegrid.js index c042ef5baf..37fd841a9a 100644 --- a/src/ol/tilegrid/tilegrid.js +++ b/src/ol/tilegrid/tilegrid.js @@ -492,6 +492,7 @@ ol.tilegrid.TileGrid.prototype.getFullTileRange = function(z) { * If 1, the nearest lower resolution will be used. If -1, the nearest * higher resolution will be used. Default is 0. * @return {number} Z. + * @api */ ol.tilegrid.TileGrid.prototype.getZForResolution = function( resolution, opt_direction) {