Il modo migliore per animare i dati radar negli openlayer


9

Ho un progetto che utilizza OpenLayers che visualizza i dati radar su una mappa. I dati radar stessi sono solo un gruppo di poligoni, ognuno dei quali è riempito con uno dei 6 possibili colori. L'obiettivo è quello di animare il radar sulla mappa. Ogni file contiene dati radar per un determinato tempo e i file sono separati da circa 5 minuti, quindi il mio approccio attuale è quello di scorrere tutti i file e caricarli uno per uno in nuovi livelli separati. Una volta creato, ogni livello ha la visibilità impostata su false e viene aggiunto alla mappa. Quindi animazione i livelli utilizzando un timer che attiva la visibilità di un livello e disattiva la visibilità del livello precedente. Attualmente i livelli sono tutti livelli vettoriali e i dati vengono caricati da file KML sebbene i file di dati possano essere praticamente qualsiasi formato che funzioni meglio per questo progetto.

Il problema con questo approccio è che una volta raggiunto un intervallo di tempo abbastanza grande (circa 3 ore circa) di dati (pari a circa 36 livelli) il consumo di memoria diventa piuttosto elevato (circa 250 MB). Si suppone che il prodotto finale sia in grado di gestire fino a 18 ore di dati in un ciclo che sulla base del numero precedente richiederebbe oltre 1 GB di memoria solo per l'animazione e probabilmente causerebbe l'arresto anomalo del browser o almeno lo renderebbe molto lento.

Ho provato la stessa cosa usando i layer WMS per ogni layer ma il redrawing era troppo lento (l'animazione cambia layer ogni 100ms) e il consumo di memoria non era molto migliore della versione vettoriale.

Ho setacciato la rete cercando di trovare alcuni esempi di come farlo, ma finora sto arrivando a mani vuote. Qualcuno là fuori ha qualche suggerimento su come farlo? Prenderò tutte le idee che hai a questo punto dato che sono rimasto bloccato su questo per settimane ormai senza una risposta in vista.

Risposte:


9

Prova una specie di finestra scorrevole. Puoi bufferizzare 10 layer alla volta. Inizia a distruggere i livelli e rimuoverli dal DOM e dalla memoria una volta raggiunti i 10 livelli. Quindi, una volta raggiunto il livello 10, il livello 0-9 viene distrutto e i livelli 20-30 vengono caricati con visibilità su false. Questo ti darà un buffer di circa 10 livelli ma puoi modificare la tua tolleranza come ritieni opportuno per le prestazioni. Se ritieni che 20 strati funzionino meglio, scegli 20.

          {Destroy Layers} |10|11...19|20| {Start Loading Layers}
|---------------------------------------------------------------------------|
                           
        Timespan           Current Possition

Lei, signore, è un genio! In realtà non l'ho ancora messo in pratica, ma non vedo alcun motivo per cui non funzioni, e il buffer regolabile significa che possiamo personalizzarlo ulteriormente per ambienti diversi. Non posso ringraziarti abbastanza per questo suggerimento!
TheOx,

Grazie, spero che funzioni in pratica. Facci sapere come funziona.
CaptDragon,

Ho appena completato i test iniziali e funziona bene! C'è ancora spazio per l'ottimizzazione del codice, ma questo metodo mantiene il footprint della memoria molto basso ed è configurabile in base alla memoria e alla larghezza di banda della macchina client. Grazie ancora per l'eccellente suggerimento!
TheOx

Fantastico, bello sentirlo.
CaptDragon

@CaptDragon: (o TheOx) Sarebbe possibile pubblicare un esempio funzionante? Capisco la soluzione fino a un certo punto, ma vedere un semplice esempio e il codice sarebbe di grande aiuto in quanto ho praticamente lo stesso problema. Grazie!
Teknocreator,

1

Hai mai pensato di semplificare i livelli vettoriali per ridurne le dimensioni. Se i poligoni contengono più vertici di quelli necessari ai fini della visualizzazione, semplificandoli (attenuandoli) si ridurrà la dimensione del file con il costo di dettagli ridotti. Non sono sicuro del software disponibile, ma diverse applicazioni desktop GIS contengono una funzione di geoprocessing per semplificare le funzionalità.


È una buona idea, ma sfortunatamente il progetto richiede la visualizzazione dei dati nella sua massima risoluzione. Tuttavia, lo terrò a mente per alcuni altri livelli di dati lungo la strada in cui potremmo essere in grado di utilizzare quel trucco.
TheOx,

1

Oltre a semplificare i dati (anche un po 'può risparmiare molto spazio) hai provato MapServer o un altro modo per trasformare i tuoi dati in riquadri con trasparenza e creare un livello di mappa da appoggiare sul livello di sfondo. Ho visto questo approccio con mappe coropletiche che hanno centinaia o centinaia di migliaia di poligoni (o marcatori), ma non sono stato ancora in grado di provarlo da solo (a causa dei requisiti del lato server).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.