SingleTile WMS layers don't respect maxExtent values set on the layer
This commit is contained in:
@@ -718,19 +718,18 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
|
|||||||
*/
|
*/
|
||||||
initSingleTile: function(bounds) {
|
initSingleTile: function(bounds) {
|
||||||
this.clearTileQueue();
|
this.clearTileQueue();
|
||||||
//determine if a maxExtent restriction exists
|
|
||||||
var maxExt = this.maxExtent || this.map.getMaxExtent() || this.map.maxExtent;
|
|
||||||
|
|
||||||
//determine new tile bounds
|
//determine new tile bounds
|
||||||
var tileWidth, tileHeight, tileBounds;
|
var tileWidth, tileHeight, tileBounds;
|
||||||
var center = bounds.getCenterLonLat();
|
var center = bounds.getCenterLonLat();
|
||||||
|
|
||||||
//adjust tile bounds to fit in maxExtent restriction
|
//adjust tile bounds to fit in maxExtent restriction
|
||||||
//if it is an overlay and there is a maxExtent restriction
|
//if there is a maxExtent restriction
|
||||||
if(this != this.map.baseLayer && maxExt && bounds.containsBounds(maxExt)) {
|
if(this.maxExtent && bounds.containsBounds(this.maxExtent, true)) {
|
||||||
bounds.bottom = Math.max(maxExt.bottom, bounds.bottom);
|
bounds.bottom = Math.max(this.maxExtent.bottom, bounds.bottom);
|
||||||
bounds.top = Math.min(maxExt.top, bounds.top);
|
bounds.top = Math.min(this.maxExtent.top, bounds.top);
|
||||||
bounds.left = Math.max(maxExt.left, bounds.left);
|
bounds.left = Math.max(this.maxExtent.left, bounds.left);
|
||||||
bounds.right = Math.min(maxExt.right, bounds.right);
|
bounds.right = Math.min(this.maxExtent.right, bounds.right);
|
||||||
tileWidth = bounds.getWidth();
|
tileWidth = bounds.getWidth();
|
||||||
tileHeight = bounds.getHeight();
|
tileHeight = bounds.getHeight();
|
||||||
tileBounds = bounds;
|
tileBounds = bounds;
|
||||||
@@ -742,10 +741,10 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
|
|||||||
lon : tileBounds.right,
|
lon : tileBounds.right,
|
||||||
lat : tileBounds.top
|
lat : tileBounds.top
|
||||||
});
|
});
|
||||||
this.tileSize = {
|
this.tileSize = new OpenLayers.Size(
|
||||||
h : Math.abs(trPx.y - blPx.y),
|
Math.abs(trPx.x - blPx.x),
|
||||||
w : Math.abs(trPx.x - blPx.x)
|
Math.abs(trPx.y - blPx.y)
|
||||||
};
|
);
|
||||||
this._resetTileSize = true;
|
this._resetTileSize = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -760,6 +759,7 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
|
|||||||
);
|
);
|
||||||
if(this._resetTileSize === true) {
|
if(this._resetTileSize === true) {
|
||||||
this.setTileSize();
|
this.setTileSize();
|
||||||
|
delete this._resetTileSize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var px = this.map.getLayerPxFromLonLat({
|
var px = this.map.getLayerPxFromLonLat({
|
||||||
|
|||||||
@@ -449,7 +449,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_Layer_Grid_initSingleTile(t) {
|
function test_Layer_Grid_initSingleTile(t) {
|
||||||
t.plan( 11 );
|
t.plan( 19 );
|
||||||
|
|
||||||
layer = new OpenLayers.Layer.Grid(name, url, params, {
|
layer = new OpenLayers.Layer.Grid(name, url, params, {
|
||||||
singleTile: true,
|
singleTile: true,
|
||||||
@@ -501,8 +501,48 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
layer.grid = [[ tile ]];
|
layer.grid = [[ tile ]];
|
||||||
layer.initSingleTile(bounds);
|
layer.initSingleTile(bounds);
|
||||||
|
|
||||||
|
//test maxExtent restrictions
|
||||||
|
//reset grid
|
||||||
|
layer.grid = [];
|
||||||
|
//layer.buffer = 0;
|
||||||
|
//layer.ratio = 1;
|
||||||
|
//useful mocks
|
||||||
|
layer.map = {
|
||||||
|
getLayerPxFromLonLat: function(ul) {
|
||||||
|
return {
|
||||||
|
x:ul.lon,
|
||||||
|
y:ul.lat
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getResolution:function(){return 1;}
|
||||||
|
};
|
||||||
|
layer.addTile = function(tileBounds, px) {
|
||||||
|
t.ok(tileBounds.equals(desiredTileBounds), "correct tile bounds passed to addTile to create new tile");
|
||||||
|
t.ok(px.x == translatedPX.x && px.y == translatedPX.y, "correct tile px passed to addTile to create new tile");
|
||||||
|
return newTile;
|
||||||
|
};
|
||||||
|
tile = {
|
||||||
|
moveTo: function(tileBounds, px) {
|
||||||
|
t.ok(tileBounds.equals(desiredTileBounds), "correct tile bounds passed to tile.moveTo()");
|
||||||
|
t.ok(px.x == translatedPX.x && px.y == translatedPX.y, "correct tile px passed to tile.moveTo()");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//test bound fully contains the maxExtent
|
||||||
|
//tile bounds -10,10,50,100
|
||||||
|
layer.maxExtent = new OpenLayers.Bounds(0,20,40,90);
|
||||||
|
desiredTileBounds = new OpenLayers.Bounds(0,20,40,90);
|
||||||
|
translatedPX = {x:0,y:90};
|
||||||
|
layer.initSingleTile(bounds);
|
||||||
|
|
||||||
|
//test bound overlaps the maxExtent
|
||||||
|
bounds = new OpenLayers.Bounds(-10,10,50,100);
|
||||||
|
layer.maxExtent = new OpenLayers.Bounds(-30,20,40,110);
|
||||||
|
desiredTileBounds = new OpenLayers.Bounds(-10,20,40,100);
|
||||||
|
translatedPX = {x:-10,y:100};
|
||||||
|
layer.grid = [[ tile ]];
|
||||||
|
layer.initSingleTile(bounds);
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_Layer_Grid_addTileMonitoringHooks(t) {
|
function test_Layer_Grid_addTileMonitoringHooks(t) {
|
||||||
|
|||||||
Reference in New Issue
Block a user