Meilleure façon d'animer des données radar dans des couches ouvertes

9

J'ai un projet utilisant OpenLayers qui affiche des données radar sur une carte. Les données radar elles-mêmes ne sont qu'un groupe de polygones, chacun étant rempli d'une des 6 couleurs possibles. Le but est d'animer le radar sur la carte. Chaque fichier contient des données radar pour un temps donné et les fichiers sont séparés d'environ 5 minutes, mon approche actuelle consiste donc à parcourir tous les fichiers et à les charger un par un dans de nouvelles couches distinctes. Une fois que chaque couche est créée, sa visibilité est définie sur false et elle est ajoutée à la carte. J'anime ensuite les calques à l'aide d'une minuterie qui active la visibilité d'un calque et désactive la visibilité du calque précédent. Actuellement, les couches sont toutes des couches vectorielles et les données sont chargées à partir de fichiers KML bien que les fichiers de données puissent être à peu près n'importe quel format qui fonctionnera le mieux pour ce projet.

Le problème avec cette approche est qu'une fois que j'ai atteint une période de temps assez longue (environ 3 heures environ) de données (ce qui équivaut à environ 36 couches), la consommation de mémoire devient assez élevée (environ 250 Mo). Le produit final est censé être capable de gérer jusqu'à 18 heures de données dans une boucle, ce qui, sur la base du nombre ci-dessus, nécessiterait plus de 1 Go de mémoire uniquement pour l'animation et planterait probablement le navigateur ou au moins le rendrait très lent.

J'ai tenté la même chose en utilisant des couches WMS pour chaque couche mais le redessin était trop lent (l'animation change de couche toutes les 100 ms) et la consommation de mémoire n'était pas beaucoup meilleure que la version vectorielle.

J'ai parcouru le filet en essayant de trouver un exemple de la façon de procéder, mais jusqu'à présent, je suis les mains vides. Quelqu'un a-t-il des suggestions sur la façon de procéder? Je vais prendre toutes les idées que vous avez à ce stade car je suis coincé là-dessus depuis des semaines sans aucune réponse en vue.

Le boeuf
la source

Réponses:

9

Essayez une sorte de fenêtre coulissante. Vous pouvez tamponner 10 couches à la fois. Commencez à détruire les couches et à les supprimer du DOM et de la mémoire une fois que vous avez atteint 10 couches. Ainsi, une fois que vous avez atteint la couche 10, les couches 0 à 9 sont détruites et les couches 20 à 30 sont chargées de fausses visibilités. Cela vous donnera un tampon d'environ 10 couches, mais vous pouvez modifier votre tolérance comme bon vous semble pour les performances. Si vous pensez que 20 couches fonctionnent mieux, optez pour 20.

          {Destroy Layers} |10|11...19|20| {Start Loading Layers}
|---------------------------------------------------------------------------|
                           
        Timespan           Current Possition
CaptDragon
la source
Vous êtes monsieur un génie! Je n'ai pas encore mis cela en pratique, mais je ne vois aucune raison pour que cela ne fonctionne pas, et le tampon réglable signifie que nous pouvons personnaliser davantage cela pour différents environnements. Je ne vous remercierai jamais assez pour cette suggestion!
TheOx
Merci, j'espère que cela fonctionne dans la pratique. Faites nous savoir comment cela marche.
CaptDragon
Je viens de terminer les tests initiaux et ça fonctionne bien! Il y a encore de la place pour l'optimisation dans le code, mais cette méthode réduit considérablement l'empreinte mémoire et est configurable en fonction de la mémoire et de la bande passante de la machine cliente. Merci encore pour l'excellente suggestion!
TheOx
Génial, bon d'entendre ça.
CaptDragon
@CaptDragon: (ou TheOx) Serait-il possible de publier sur un exemple de travail? Je comprends la solution à un certain point, mais voir un exemple simple et le code aiderait grandement car j'ai à peu près le même problème. Merci!
teknocreator
1

Avez-vous envisagé de simplifier les couches vectorielles pour réduire leur taille de fichier. Si les polygones contiennent plus de sommets que nécessaire pour les besoins de votre affichage, leur simplification (lissage) réduira la taille du fichier avec le coût de détails réduits. Je ne sais pas quel logiciel vous avez à votre disposition, mais plusieurs applications de bureau SIG contiennent une fonction de géotraitement pour simplifier les fonctionnalités.

Rich Wawrzonek
la source
C'est une bonne idée mais malheureusement le projet nécessite d'afficher les données dans sa pleine résolution. Cependant, je garderai cela à l'esprit pour d'autres couches de données sur la route où nous pourrions être en mesure d'utiliser cette astuce.
TheOx
1

En plus de simplifier les données (même un peu peut économiser beaucoup d'espace), avez-vous essayé MapServer ou une autre façon de transformer vos données en mosaïques avec transparence et de créer une couche de carte à superposer à la couche d'arrière-plan. J'ai vu cette approche avec des cartes choroplèthes qui ont des centaines à des centaines de milliers de polygones (ou marqueurs), mais je n'ai pas encore pu l'essayer moi-même (en raison de l'exigence côté serveur).

Gary
la source