Merge pull request #87 from ahocevar/retile

getTilesBounds fixes and no unnecessary retiling. r=@bartvde
This commit is contained in:
ahocevar
2011-12-02 16:43:46 -08:00
7 changed files with 33 additions and 44 deletions

View File

@@ -319,14 +319,6 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
}
} else {
// if the bounds have changed such that they are not even
// *partially* contained by our tiles (IE user has
// programmatically panned to the other side of the earth)
// then we want to reTile (thus, partial true).
forceReTile = forceReTile ||
!tilesBounds.containsBounds(bounds, true);
if(resolution !== serverResolution) {
bounds = this.map.calculateBounds(null, serverResolution);
if(forceReTile) {
@@ -583,18 +575,16 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
getTilesBounds: function() {
var bounds = null;
if (this.grid.length) {
var bottom = this.grid.length - 1;
var bottomLeftTile = this.grid[bottom][0];
var right = this.grid[0].length - 1;
var topRightTile = this.grid[0][right];
bounds = new OpenLayers.Bounds(bottomLeftTile.bounds.left,
bottomLeftTile.bounds.bottom,
topRightTile.bounds.right,
topRightTile.bounds.top);
var length = this.grid.length;
if (length) {
var bottomLeftTileBounds = this.grid[length - 1][0].bounds,
width = this.grid[0].length * bottomLeftTileBounds.getWidth(),
height = this.grid.length * bottomLeftTileBounds.getHeight();
bounds = new OpenLayers.Bounds(bottomLeftTileBounds.left,
bottomLeftTileBounds.bottom,
bottomLeftTileBounds.left + width,
bottomLeftTileBounds.bottom + height);
}
return bounds;
},
@@ -658,10 +648,6 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
*/
calculateGridLayout: function(bounds, origin, resolution) {
bounds = bounds.clone();
var map = this.map;
if (map.wrapDateLine) {
bounds = bounds.wrapDateLine(map.getMaxExtent());
}
var tilelon = resolution * this.tileSize.w;
var tilelat = resolution * this.tileSize.h;

View File

@@ -94,14 +94,14 @@
function test_Layer_Grid_getTilesBounds(t) {
t.plan(3);
t.plan(4);
layer = new OpenLayers.Layer.WMS(name, url, params);
//normal grid
var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
layer.grid = [ [6, tr],
[bl, 7]];
@@ -123,6 +123,16 @@
bounds = layer.getTilesBounds();
t.ok( bounds.equals(testBounds), "getTilesBounds() returns correct bounds");
//world wrapped around the dateline
var bl = { bounds: new OpenLayers.Bounds(0,-90,180,90)};
var tr = { bounds: new OpenLayers.Bounds(-180,-90,0,90)};
layer.grid = [[bl, tr]];
var bounds = layer.getTilesBounds();
var testBounds = new OpenLayers.Bounds(0,-90,360,90);
t.ok( bounds.equals(testBounds), "getTilesBounds() returns correct bounds");
}
@@ -159,7 +169,7 @@
function test_Layer_Grid_moveTo(t) {
t.plan(14);
t.plan(12);
var map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.WMS(name, url, params);
@@ -280,13 +290,6 @@
layer.grid = [ [ {} ] ];
layer.singleTile = false;
// drastic pan
clearTestBounds();
tilesBounds = new OpenLayers.Bounds(-150,-150,-120,-120);
layer.moveTo(null, zoomChanged);
t.ok(g_WhichFunc == "InitGridded", "if tiles drastically out of bounds, we call initGriddedTile()");
t.ok(g_Bounds.equals(b), "if tiles drastically out of bounds, we call initGriddedTile() with correct bounds");
//regular move
clearTestBounds();
tilesBounds = new OpenLayers.Bounds(10,10,120,120);

View File

@@ -94,8 +94,8 @@
layer = new OpenLayers.Layer.KaMap(name, url, params, units);
var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
layer.grid = [ [6, tr],
[bl, 7]];

View File

@@ -42,8 +42,8 @@
layer = new OpenLayers.Layer.TMS(name, url, options);
var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
layer.grid = [ [6, tr],
[bl, 7]];

View File

@@ -66,8 +66,8 @@
var options = {'type':'png'};
var layer = new OpenLayers.Layer.TileCache(name, url, layername, options);
var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
layer.grid = [ [6, tr],
[bl, 7]];

View File

@@ -119,8 +119,8 @@
tileSize: new OpenLayers.Size(512, 512),
requestEncoding: "REST"
});
var bl = {bounds: new OpenLayers.Bounds(1,2,0,0)};
var tr = {bounds: new OpenLayers.Bounds(0,0,3,4)};
var bl = {bounds: new OpenLayers.Bounds(1,2,2,3)};
var tr = {bounds: new OpenLayers.Bounds(2,3,3,4)};
layer1.grid = [[6, tr],[bl, 7]];
var bounds = layer1.getTilesBounds();
var testBounds = new OpenLayers.Bounds(1,2,3,4);

View File

@@ -41,8 +41,8 @@
layer = new OpenLayers.Layer.XYZ(name, url, options);
var bl = { bounds: new OpenLayers.Bounds(1,2,0,0)};
var tr = { bounds: new OpenLayers.Bounds(0,0,3,4)};
var bl = { bounds: new OpenLayers.Bounds(1,2,2,3)};
var tr = { bounds: new OpenLayers.Bounds(2,3,3,4)};
layer.grid = [ [6, tr],
[bl, 7]];