我可以通过按钮点击事件流畅地在基础层之间切换,但是当我执行相同的缩放级别阈值控制时,我得到大约三秒的延迟,而前一个基础层保持可见,并且不可能进一步进行缩放操作。在以下示例中,在加载页面后放大时会出现此延迟。您可以在缩小时在my real project website上重现该问题,并在刚开始时重现该问题。
var geogr = new OpenLayers.Projection("EPSG:4326");
var google = new OpenLayers.Projection("EPSG:900913");
var west = -2.30;
var east = -1.92;
var north = 37.87;
var south = 37.65;
var extent = new OpenLayers.Bounds(west, south, east, north).transform(geogr,google);
var center = new OpenLayers.LonLat(-2.134946,37.768344).transform(geogr,google);
map = new OpenLayers.Map("map",{
restrictedExtent: extent,
displayProjection: geogr,
tileManager: null,
transitionEffect: null,
zoomMethod: null,
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.Scale(),
new OpenLayers.Control.Zoom(),
new OpenLayers.Control.KeyboardDefaults()
]
});
var OSM = new OpenLayers.Layer.OSM(
"OSM", "http://a.tile.thunderforest.com/landscape/${z}/${x}/${y}.png",{
isBaseLayer: true,
visibility: true
});
var cycle = new OpenLayers.Layer.OSM(
"cycle", "http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",{
isBaseLayer: false,
visibility: false
});
var aoi_edges = [
new OpenLayers.Geometry.Point(west, north),
new OpenLayers.Geometry.Point(east, north),
new OpenLayers.Geometry.Point(east, south),
new OpenLayers.Geometry.Point(west, south)
];
map.addLayers([OSM, cycle]);
map.setCenter(center, 12);
var currentZoomLevel = 108000; //level before zooming
map.events.register('zoomend', this, function (event) {
if ( (map.getScale() < 200000 && currentZoomLevel > 200000) || (map.getScale() > 4000 && currentZoomLevel < 4000) ) { // zoom threshold
map.setBaseLayer(OSM);
}
if ((map.getScale() > 200000 && currentZoomLevel < 200000) || (map.getScale() < 4000 && currentZoomLevel > 4000) ) { // zoom threshold
map.setBaseLayer(cycle);
}
currentZoomLevel = map.getScale();
});