OpenLayers刷新战略问题

时间:2011-10-03 05:34:20

标签: javascript map openlayers

我正在开发一个应用程序,其中一部分使用OpenLayers(调用Geoserver服务的WMS)显示一些经常更新的数据(船只轨道 - 或更具体地说,一系列点)。

我希望这个船只轨道在设定的时间间隔内更新 - OpenLayers.Strategy.Refresh似乎是最适合的方式。我稍微修改了wms.html示例(OpenLayers 2.11)来试试这个,即:

underway = new OpenLayers.Layer.WMS("Underway Data",
    "http://ubuntu-geospatial-server:8080/geoserver/underway/wms", 
    {'layers': 'underway:ss2011_v03', transparent: true, format: 'image/gif'},
    {isBaseLayer: false},
    {strategies : [new OpenLayers.Strategy.Refresh({interval: 6000})]} 
);

map.addLayers([layer, underway]);

据我所知,这应该按原样工作(即每隔6秒刷新一次进行中的层),但没有任何反应。基础WMS正在更新 - 如果我手动刷新地图,将显示更新的数据。

我确信我错过了一些相当明显的东西,任何帮助都会非常感激。我在Firebug或其他任何事情上都没有任何错误,它只是没有做任何事情。

2 个答案:

答案 0 :(得分:10)

嗯,事实证明,就我所知,你无法对WMS服务进行刷新策略。所以我将我的代码转换为使用WFS,它按预期工作。代码:

        underway = new OpenLayers.Layer.Vector("WFS", {
            strategies: [new OpenLayers.Strategy.BBOX(), new OpenLayers.Strategy.Refresh({interval: 4000, force: true})],
            protocol: new OpenLayers.Protocol.WFS({
                url:  "http://ubuntu-geospatial-server:8080/geoserver/wfs",
                featureType: "ss2011_v03",
                featureNS: "http://csiro.au/underway",
                geometryName: "position"
            });

请注意,我还需要一个BBOX策略。我发现的另一个问题是我需要手动指定geometryName,否则它将默认为“the_geom”,这对于我的图层不存在。

答案 1 :(得分:-2)

我很确定您需要添加new OpenLayers.Strategy.Static()策略才能正常运行。 您需要激活Refresh策略,这意味着您必须将其添加到单独的变量中。