Merge pull request #208 from tschaub/shift-with-care

Calculating resolution by left shifting tile sizes, we're unnecessarily restricted in the number of zoom levels we can have.
This commit is contained in:
Tim Schaub
2013-02-19 06:00:39 -08:00
4 changed files with 36 additions and 4 deletions

View File

@@ -333,8 +333,9 @@ ol.tilegrid.createForProjection =
opt_tileSize : new ol.Size(ol.DEFAULT_TILE_SIZE, ol.DEFAULT_TILE_SIZE);
var resolutions = new Array(maxZoom + 1);
goog.asserts.assert(tileSize.width == tileSize.height);
size = size / tileSize.width;
for (var z = 0, zz = resolutions.length; z < zz; ++z) {
resolutions[z] = size / (tileSize.width << z);
resolutions[z] = size / Math.pow(2, z);
}
return new ol.tilegrid.TileGrid({
origin: projectionExtent.getTopLeft(),

View File

@@ -17,9 +17,9 @@ ol.tilegrid.XYZ = function(xyzOptions) {
var resolutions = new Array(xyzOptions.maxZoom + 1);
var z;
var size = 2 * ol.Projection.EPSG_3857_HALF_SIZE / ol.DEFAULT_TILE_SIZE;
for (z = 0; z <= xyzOptions.maxZoom; ++z) {
resolutions[z] =
2 * ol.Projection.EPSG_3857_HALF_SIZE / (ol.DEFAULT_TILE_SIZE << z);
resolutions[z] = size / Math.pow(2, z);
}
goog.base(this, {

View File

@@ -56,7 +56,7 @@ ol.View2D = function(opt_view2DOptions) {
projectionExtent.maxX - projectionExtent.minX,
projectionExtent.maxY - projectionExtent.minY);
values[ol.View2DProperty.RESOLUTION] =
size / (ol.DEFAULT_TILE_SIZE << view2DOptions.zoom);
size / (ol.DEFAULT_TILE_SIZE * Math.pow(2, view2DOptions.zoom));
}
values[ol.View2DProperty.ROTATION] = view2DOptions.rotation;
this.setValues(values);

View File

@@ -94,6 +94,37 @@ describe('ol.tilegrid.TileGrid', function() {
});
});
describe('createForProjection', function() {
it('allows easier creation of a tile grid', function() {
var projection = ol.Projection.getFromCode('EPSG:3857');
var grid = ol.tilegrid.createForProjection(projection);
expect(grid).toBeA(ol.tilegrid.TileGrid);
var resolutions = grid.getResolutions();
expect(resolutions.length).toBe(19);
});
it('accepts a number of zoom levels', function() {
var projection = ol.Projection.getFromCode('EPSG:3857');
var grid = ol.tilegrid.createForProjection(projection, 22);
expect(grid).toBeA(ol.tilegrid.TileGrid);
var resolutions = grid.getResolutions();
expect(resolutions.length).toBe(23);
});
it('accepts a big number of zoom levels', function() {
var projection = ol.Projection.getFromCode('EPSG:3857');
var grid = ol.tilegrid.createForProjection(projection, 23);
expect(grid).toBeA(ol.tilegrid.TileGrid);
var resolutions = grid.getResolutions();
expect(resolutions.length).toBe(24);
});
});
describe('getTileCoordFromCoordAndZ', function() {
describe('Y North, X East', function() {