Merge pull request #2758 from tschaub/tile-ranges
Correctly generate child tile ranges for XYZ tiles.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user