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:
@@ -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(),
|
||||
|
||||
@@ -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, {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user