OpenLayers http refresh回调函数



这是我的代码的精简版本,每2秒重新加载一个KML文件。在每次更新时,我想让相机平移到图层的特征范围,但我不知道在哪里设置回调。

//set up ajax    
var protocol = new OpenLayers.Protocol.HTTP({
    url: "feed.kml",
    format: new OpenLayers.Format.KML(),
    callback: function(){
        alert("here"); //never called
    }
});
//create refresher
var refresh = new OpenLayers.Strategy.Refresh({force: true, active: true});
//create layer for kml
var trackLayer = new OpenLayers.Layer.Vector("KML", {
    strategies: [new OpenLayers.Strategy.Fixed(), refresh],
    protocol: protocol,
});
//add to map
map.addLayer(trackLayer);
//refresh the kml every 2 seconds
setInterval(function(){
    refresh.refresh();      
    //pan to extent
    map.panTo(trackLayer.getDataExtent().getCenterLonLat());
},2000);

问题是这一行:map.panTo(trackLayer.getDataExtent().getCenterLonLat());在请求完成之前被调用。

文档如下:

  • http://dev.openlayers.org/docs/files/OpenLayers/Strategy/Refresh-js.html
  • http://dev.openlayers.org/docs/files/OpenLayers/Layer/Vector-js.html
  • http://dev.openlayers.org/docs/files/OpenLayers/Protocol/HTTP-js.html

我明白了。我觉得自己很愚蠢,没有更快地解决这个问题。

//zoom callback
trackLayer.events.register("featuresadded",trackLayer,function(){
    var bounds = trackLayer.getDataExtent();
    if(bounds){ map.panTo(bounds.getCenterLonLat()); }
});

最新更新