OpenLayers обновить стратегические проблемы - PullRequest
7 голосов
/ 03 октября 2011

Я занимаюсь разработкой приложения, часть которого использует OpenLayers (вызывающий 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 ]

10 голосов
/ 04 октября 2011

Ну, получается, что вы не можете сделать стратегию обновления для службы 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», которого нет в моем слое.

0 голосов
/ 03 октября 2011

Я уверен, что вам нужно добавить стратегию new OpenLayers.Strategy.Static(), чтобы она работала. И вам нужно активировать стратегию Refresh, что означает, что вы должны поместить ее в отдельную переменную.

...