我正在开发一个应用程序,其中一部分使用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或其他任何事情上都没有任何错误,它只是没有做任何事情。
答案 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
策略,这意味着您必须将其添加到单独的变量中。