Add specialized ol.tilegrid.XYZ.forEachTileCoordParentTileBounds

This commit is contained in:
Tom Payne
2012-08-06 13:45:22 +02:00
parent c4a9e970b5
commit b0fa84b38c
2 changed files with 74 additions and 0 deletions

View File

@@ -40,6 +40,30 @@ ol.tilegrid.XYZ = function(maxZoom, opt_tileSize) {
goog.inherits(ol.tilegrid.XYZ, ol.TileGrid);
/**
* @inheritDoc
*/
ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileBounds =
function(tileCoord, callback, opt_obj) {
var x = tileCoord.x;
var y = tileCoord.y;
var z = tileCoord.z;
var tileBounds;
while (true) {
z -= 1;
if (z < 0) {
break;
}
x = Math.floor(x / 2);
y = Math.floor(y / 2);
tileBounds = new ol.TileBounds(x, y, x, y);
if (callback.call(opt_obj, z, tileBounds)) {
break;
}
}
};
/**
* @constructor

View File

@@ -77,3 +77,53 @@ function testXYZCropY() {
assertUndefined(tileUrl);
}
function testXYZTileGridForEachTileCoordParentTileBounds() {
var xyzTileGrid = new ol.tilegrid.XYZ(6);
var tileCoord = new ol.TileCoord(5, 11, 21);
var zs = [], tileBoundss = [];
xyzTileGrid.forEachTileCoordParentTileBounds(
tileCoord,
function(z, tileBounds) {
zs.push(z);
tileBoundss.push(tileBounds);
return false;
});
assertEquals(5, zs.length);
assertEquals(5, tileBoundss.length);
assertEquals(4, zs[0]);
assertEquals(5, tileBoundss[0].minX);
assertEquals(10, tileBoundss[0].minY);
assertEquals(5, tileBoundss[0].maxX);
assertEquals(10, tileBoundss[0].maxY);
assertEquals(3, zs[1]);
assertEquals(2, tileBoundss[1].minX);
assertEquals(5, tileBoundss[1].minY);
assertEquals(2, tileBoundss[1].maxX);
assertEquals(5, tileBoundss[1].maxY);
assertEquals(2, zs[2]);
assertEquals(1, tileBoundss[2].minX);
assertEquals(2, tileBoundss[2].minY);
assertEquals(1, tileBoundss[2].maxX);
assertEquals(2, tileBoundss[2].maxY);
assertEquals(1, zs[3]);
assertEquals(0, tileBoundss[3].minX);
assertEquals(1, tileBoundss[3].minY);
assertEquals(0, tileBoundss[3].maxX);
assertEquals(1, tileBoundss[3].maxY);
assertEquals(0, zs[4]);
assertEquals(0, tileBoundss[4].minX);
assertEquals(0, tileBoundss[4].minY);
assertEquals(0, tileBoundss[4].maxX);
assertEquals(0, tileBoundss[4].maxY);
}