Merge pull request #2758 from tschaub/tile-ranges

Correctly generate child tile ranges for XYZ tiles.
This commit is contained in:
Tim Schaub
2014-09-28 13:40:28 -06:00
2 changed files with 73 additions and 2 deletions

View File

@@ -100,9 +100,11 @@ ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) {
ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange =
function(tileCoord, opt_tileRange) {
if (tileCoord[0] < this.maxZoom) {
var doubleX = 2 * tileCoord[1];
var doubleY = 2 * tileCoord[2];
return ol.TileRange.createOrUpdate(
2 * tileCoord[1], 2 * (tileCoord[1] + 1),
2 * tileCoord[2], 2 * (tileCoord[2] + 1),
doubleX, doubleX + 1,
doubleY, doubleY + 1,
opt_tileRange);
} else {
return null;

View File

@@ -10,6 +10,74 @@ describe('ol.tilegrid.XYZ', function() {
});
});
describe('#getTileCoordChildTileRange()', function() {
it('returns the tile range for one zoom level deeper', function() {
var range;
range = xyzTileGrid.getTileCoordChildTileRange([0, 0, 0]);
expect(range.minX).to.be(0);
expect(range.maxX).to.be(1);
expect(range.minY).to.be(0);
expect(range.maxY).to.be(1);
range = xyzTileGrid.getTileCoordChildTileRange([0, 1, 0]);
expect(range.minX).to.be(2);
expect(range.maxX).to.be(3);
expect(range.minY).to.be(0);
expect(range.maxY).to.be(1);
range = xyzTileGrid.getTileCoordChildTileRange([0, 0, 1]);
expect(range.minX).to.be(0);
expect(range.maxX).to.be(1);
expect(range.minY).to.be(2);
expect(range.maxY).to.be(3);
range = xyzTileGrid.getTileCoordChildTileRange([0, -1, 0]);
expect(range.minX).to.be(-2);
expect(range.maxX).to.be(-1);
expect(range.minY).to.be(0);
expect(range.maxY).to.be(1);
range = xyzTileGrid.getTileCoordChildTileRange([0, 0, -1]);
expect(range.minX).to.be(0);
expect(range.maxX).to.be(1);
expect(range.minY).to.be(-2);
expect(range.maxY).to.be(-1);
});
it('returns null for z > maxZoom', function() {
var max = xyzTileGrid.maxZoom;
var range = xyzTileGrid.getTileCoordChildTileRange([max + 1, 0, 0]);
expect(range).to.be(null);
});
it('is like ol.tilegrid.TileGrid#getTileCoordChildTileRange()', function() {
var superMethod = ol.tilegrid.TileGrid.prototype
.getTileCoordChildTileRange.bind(xyzTileGrid);
var coord, selfRange, superRange;
coord = [0, 0, 0];
selfRange = xyzTileGrid.getTileCoordChildTileRange(coord);
superRange = superMethod(coord);
expect(selfRange.minX).to.be(superRange.minX);
expect(selfRange.maxX).to.be(superRange.maxX);
expect(selfRange.minY).to.be(superRange.minY);
expect(selfRange.maxY).to.be(superRange.maxY);
coord = [1, 2, 3];
selfRange = xyzTileGrid.getTileCoordChildTileRange(coord);
superRange = superMethod(coord);
expect(selfRange.minX).to.be(superRange.minX);
expect(selfRange.maxX).to.be(superRange.maxX);
expect(selfRange.minY).to.be(superRange.minY);
expect(selfRange.maxY).to.be(superRange.maxY);
});
});
describe('forEachTileCoordParentTileRange', function() {
it('iterates as expected', function() {
@@ -96,4 +164,5 @@ describe('ol.tilegrid.XYZ', function() {
goog.require('ol.TileCoord');
goog.require('ol.TileRange');
goog.require('ol.tilegrid.TileGrid');
goog.require('ol.tilegrid.XYZ');