diff --git a/src/ol/layer/XYZ.js b/src/ol/layer/XYZ.js index d9ff88ef89..fb44ff361c 100644 --- a/src/ol/layer/XYZ.js +++ b/src/ol/layer/XYZ.js @@ -133,19 +133,23 @@ ol.layer.XYZ.prototype.getData = function(bounds, resolution) { gridLeft = tileOriginX + tileWidthGeo * offsetX, gridTop = tileOriginY - tileHeightGeo * offsetY; - var tiles = [], tile, url, i = 0, j; - while (gridTop - (i * tileHeightGeo) > boundsMinY) { - tiles[i] = []; - j = 0; - while (gridLeft + (j * tileWidthGeo) < boundsMaxX) { - url = me.url_.replace('{x}', offsetX + i + '') - .replace('{y}', offsetY + j + '') + var tiles = [], + tile, + url, + x = 0, + y = 0; + while (gridTop - (y * tileHeightGeo) > boundsMinY) { + tiles[y] = []; + while (gridLeft + (x * tileWidthGeo) < boundsMaxX) { + url = me.url_.replace('{x}', offsetX + x + '') + .replace('{y}', offsetY + y + '') .replace('{z}', zoom); tile = new ol.Tile(url); - tiles[i][j] = tile; - j++; + tiles[y][x] = tile; + x++; } - i++; + y++; + x = 0; } return new ol.TileSet(tiles, tileWidth, tileHeight, resolution); diff --git a/test/spec/ol/layer/XYZ.test.js b/test/spec/ol/layer/XYZ.test.js index d8b595fedc..e048486804 100644 --- a/test/spec/ol/layer/XYZ.test.js +++ b/test/spec/ol/layer/XYZ.test.js @@ -51,11 +51,11 @@ describe('ol.layer.XYZ', function() { expect(tile.getImg()).toBeDefined(); tile = tiles[0][1]; - expect(tile.getUrl()).toEqual('/1/0/1'); + expect(tile.getUrl()).toEqual('/1/1/0'); expect(tile.getImg()).toBeDefined(); tile = tiles[1][0]; - expect(tile.getUrl()).toEqual('/1/1/0'); + expect(tile.getUrl()).toEqual('/1/0/1'); expect(tile.getImg()).toBeDefined(); tile = tiles[1][1]; @@ -81,11 +81,11 @@ describe('ol.layer.XYZ', function() { expect(tile.getImg()).toBeDefined(); tile = tiles[0][1]; - expect(tile.getUrl()).toEqual('/1/0/1'); + expect(tile.getUrl()).toEqual('/1/1/0'); expect(tile.getImg()).toBeDefined(); tile = tiles[1][0]; - expect(tile.getUrl()).toEqual('/1/1/0'); + expect(tile.getUrl()).toEqual('/1/0/1'); expect(tile.getImg()).toBeDefined(); tile = tiles[1][1]; @@ -94,5 +94,68 @@ describe('ol.layer.XYZ', function() { }); }); + describe('extent -96,32,-32,96, resolution 0.5', function() { + + it('returns the expected data', function() { + var tileset = layer.getData( + new ol.Bounds(-96, 32, -32, 96), 0.5); + + var tiles = tileset.getTiles(); + expect(tiles.length).toEqual(1); + expect(tiles[0].length).toEqual(1); + + var tile; + + tile = tiles[0][0]; + expect(tile.getUrl()).toEqual('/1/0/0'); + expect(tile.getImg()).toBeDefined(); + }); + }); + + describe('extent -32,32,32,96, resolution 0.5', function() { + + it('returns the expected data', function() { + var tileset = layer.getData( + new ol.Bounds(-32, 32, 32, 96), 0.5); + + var tiles = tileset.getTiles(); + expect(tiles.length).toEqual(1); + expect(tiles[0].length).toEqual(2); + + var tile; + + tile = tiles[0][0]; + expect(tile.getUrl()).toEqual('/1/0/0'); + expect(tile.getImg()).toBeDefined(); + + tile = tiles[0][1]; + expect(tile.getUrl()).toEqual('/1/1/0'); + expect(tile.getImg()).toBeDefined(); + }); + }); + + describe('extent 32,-32,96,32, resolution 0.5', function() { + + it('returns the expected data', function() { + var tileset = layer.getData( + new ol.Bounds(32, -32, 96, 32), 0.5); + + var tiles = tileset.getTiles(); + expect(tiles.length).toEqual(2); + expect(tiles[0].length).toEqual(1); + expect(tiles[1].length).toEqual(1); + + var tile; + + tile = tiles[0][0]; + expect(tile.getUrl()).toEqual('/1/1/0'); + expect(tile.getImg()).toBeDefined(); + + tile = tiles[1][0]; + expect(tile.getUrl()).toEqual('/1/1/1'); + expect(tile.getImg()).toBeDefined(); + }); + }); + }); });