2011-10-03 36 views
7

Estoy desarrollando una aplicación, parte de la cual usa OpenLayers (llamando a un WMS servido por Geoserver) que muestra algunos datos actualizados frecuentemente (un seguimiento de buques, o más específicamente, una serie de puntos).OpenLayers Refresh Strategy Problems

Me gustaría tener esta ruta de barco actualizada en un intervalo establecido - OpenLayers.Strategy.Refresh parece ser la forma más adecuada para hacer esto. He modificado el ejemplo wms.html (OpenLayers 2.11) ligeramente para probar esto, es decir:

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]); 

De lo que puedo decir, esto debería funcionar tal como está (por ejemplo, actualice la capa en curso cada 6 segundos), sin embargo nada sucede. El WMS subyacente se está actualizando; si actualizo el mapa manualmente, aparecerán los datos actualizados.

Estoy seguro de que me falta algo bastante obvio, cualquier ayuda sería muy apreciada. No recibo ningún error en Firebug ni nada, simplemente no estoy haciendo nada.

Respuesta

10

Bueno, resulta que no se puede hacer una estrategia de actualización en un servicio WMS, por lo que yo sé. Así que convertí mi código para usar WFS en su lugar, y funciona como se esperaba. El código:

 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" 
      }); 

Tenga en cuenta que también necesito una estrategia BBOX. Otro problema que encontré fue que necesitaba especificar manualmente el nombre de la geometría, de lo contrario se usaría el valor predeterminado "the_geom", que no existe para mi capa.

-2

Estoy bastante seguro de que necesita agregar una estrategia new OpenLayers.Strategy.Static() para que funcione. Y debe activar su estrategia Refresh, lo que significa que debe pegarla en una variable separada.

+0

No hay alegría allí. No pude encontrar OpenLayers.Strategy.Static() ni en trunk ni en 2.11. Intenté configurar algunas de las otras estrategias que parecían que posiblemente funcionarían (bbox, arregladas), pero no eran buenas. Mi código modificado se veía como: 'bboxStrategy = new OpenLayers.Strategy.BBOX(); bboxStrategy.setLayer (en curso); bboxStrategy.activate(); refreshStrategy = new OpenLayers.Strategy.Refresh ({interval: 2000, force: true}); refreshStrategy.setLayer (en curso); refreshStrategy.activate(); ' pero esto dio como resultado el mismo problema, no pasó nada. – Caligari