2011-10-03 17 views
7

Sto sviluppando un'applicazione, parte della quale utilizza OpenLayers (chiamando un servizio WMS fornito da Geoserver) che mostra alcuni dati aggiornati di frequente (una traccia nave o, più specificamente, una serie di punti).OpenLayers Refresh Strategy Problemi

Mi piacerebbe avere questa traccia dell'imbarcazione aggiornata a intervalli regolari - OpenLayers.Strategy.Refresh sembra il modo più appropriato per farlo. Ho modificato l'esempio wms.html (OpenLayers 2.11) un po 'di provare questo, vale a dire:

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

Da quello che posso dire, questo dovrebbe funzionare così com'è (cioè aggiornare lo strato in corso ogni 6 secondi), ma niente accade. Il WMS sottostante viene aggiornato: se aggiorno manualmente la mappa, verranno visualizzati i dati aggiornati.

Sono sicuro che mi manca qualcosa di abbastanza ovvio, qualsiasi aiuto sarebbe molto apprezzato. Non ricevo errori in Firebug o altro, semplicemente non sta facendo nulla.

risposta

10

Bene, si scopre che non è possibile eseguire una strategia di aggiornamento su un servizio WMS, per quanto ne so. Così ho convertito il mio codice per usare invece WFS, e funziona come previsto. Il codice:

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

Nota che ho anche bisogno di una strategia BBOX. Un altro trucco che ho trovato è stato che avevo bisogno di specificare manualmente geometryName, altrimenti sarebbe default a "the_geom", che non esiste per il mio layer.

-2

Sono abbastanza sicuro che è necessario aggiungere una strategia new OpenLayers.Strategy.Static() per farlo funzionare. E devi attivare la tua strategia Refresh che significa che devi inserirla in una variabile separata.

+0

Nessuna gioia lì. Non sono riuscito a trovare OpenLayers.Strategy.Static() nel trunk o nel 2.11. Ho provato a impostare alcune delle altre strategie che sembravano potessero funzionare (bbox, fisso), ma non va bene. Il mio codice modificato sembrava: 'bboxStrategy = new OpenLayers.Strategy.BBOX(); bboxStrategy.setLayer (in corso); bboxStrategy.activate(); refreshStrategy = new OpenLayers.Strategy.Refresh ({interval: 2000, force: true}); refreshStrategy.setLayer (in corso); refreshStrategy.activate(); ' ma questo ha provocato lo stesso problema, non succede nulla. – Caligari