切换由zoom事件触发的基础层时滞后

时间:2014-07-22 09:58:55

标签: javascript openlayers

我可以通过按钮点击事件流畅地在基础层之间切换,但是当我执行相同的缩放级别阈值控制时,我得到大约三秒的延迟,而前一个基础层保持可见,并且不可能进一步进行缩放操作。在以下示例中,在加载页面后放大时会出现此延迟。您可以在缩小时在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();
});

0 个答案:

没有答案