La mejor manera de animar datos de radar en capas abiertas

9

Tengo un proyecto que usa OpenLayers que muestra datos de radar en un mapa. Los datos del radar en sí son solo un montón de polígonos, cada uno de los cuales está lleno de uno de los 6 colores posibles. El objetivo es animar el radar en el mapa. Cada archivo contiene datos de radar durante un tiempo determinado y los archivos están separados por aproximadamente 5 minutos, por lo que mi enfoque actual es recorrer todos los archivos y cargarlos uno por uno en nuevas capas separadas. Una vez que se crea cada capa, tiene su visibilidad establecida en falso y se agrega al mapa. Luego animé las capas usando un temporizador que activa la visibilidad de una capa y desactiva la visibilidad de la capa anterior. Actualmente, las capas son todas capas vectoriales y los datos se cargan desde archivos KML, aunque los archivos de datos pueden tener prácticamente cualquier formato que funcione mejor para este proyecto.

El problema con este enfoque es que una vez que alcanzo un período de tiempo bastante grande (alrededor de 3 horas más o menos) de datos (equivalente a aproximadamente 36 capas), el consumo de memoria se vuelve bastante alto (alrededor de 250 mb). Se supone que el producto final puede manejar hasta 18 horas de datos en un bucle que, según el número anterior, requeriría más de 1 GB de memoria solo para la animación y probablemente bloquearía el navegador o al menos lo haría muy lento.

Intenté lo mismo usando capas WMS para cada capa, pero el rediseño fue demasiado lento (la animación cambia las capas cada 100 ms) y el consumo de memoria no fue mucho mejor que la versión vectorial.

He recorrido la red tratando de encontrar algún ejemplo de cómo hacer esto, pero hasta ahora estoy llegando con las manos vacías. ¿Alguien por ahí tiene alguna sugerencia sobre cómo hacer esto? Tomaré cualquier idea que tengas en este momento, ya que he estado atrapado en esto durante semanas y no tengo respuesta a la vista.

El buey
fuente

Respuestas:

9

Pruebe con una ventana deslizante de algún tipo. Puede almacenar 10 capas a la vez. Comienza a destruir capas y a eliminarlas del DOM y la memoria una vez que alcances las 10 capas. Entonces, una vez que llegas a la capa 10, las capas 0-9 se destruyen y las capas 20-30 se cargan con visibilidad a falso. Esto le dará un búfer de aproximadamente 10 capas, pero puede modificar su tolerancia como mejor le parezca para el rendimiento. Si cree que 20 capas funcionan mejor, vaya con 20.

          {Destroy Layers} |10|11...19|20| {Start Loading Layers}
|---------------------------------------------------------------------------|
                           
        Timespan           Current Possition
CaptDragon
fuente
¡Usted señor es un genio! Realmente no lo he puesto en práctica todavía, pero no veo ninguna razón para que no funcione, y el búfer ajustable significa que podemos personalizarlo aún más para diferentes entornos. ¡No puedo agradecerles lo suficiente por esta sugerencia!
TheOx
Gracias, espero que funcione en la práctica. Haganos saber como funciona.
CaptDragon
¡Acabo de completar la prueba inicial y está funcionando bien! Todavía hay espacio para la optimización en el código, pero este método mantiene la huella de memoria baja y es configurable en función de la memoria y el ancho de banda de la máquina cliente. Gracias de nuevo por la excelente sugerencia!
TheOx
Impresionante, es bueno escuchar eso.
CaptDragon
@CaptDragon: (o TheOx) ¿Sería posible publicar en un ejemplo de trabajo? Entiendo la solución hasta cierto punto, pero ver un ejemplo simple y el código sería de gran ayuda, ya que tengo casi el mismo problema. ¡Gracias!
teknocreator
1

¿Ha considerado simplificar las capas vectoriales para reducir su tamaño de archivo? Si los polígonos contienen más vértices de los necesarios para su visualización, simplificarlos (suavizarlos) reducirá el tamaño del archivo con el costo de reducir los detalles. No estoy seguro de qué software tiene a su disposición, pero varias aplicaciones de escritorio SIG contienen una función de geoprocesamiento para simplificar las funciones.

Rich Wawrzonek
fuente
Es una buena idea, pero desafortunadamente el proyecto requiere mostrar los datos en su resolución completa. Sin embargo, lo tendré en cuenta para algunas otras capas de datos en el futuro donde podríamos usar ese truco.
TheOx
1

Además de simplificar los datos (incluso un poco puede ahorrar mucho espacio), ¿ha probado MapServer o alguna otra forma de convertir sus datos en mosaicos con transparencia y crear una capa de mapa para colocarla encima de la capa de fondo? He visto este enfoque con mapas coropléticos que tienen cientos o cientos de miles de polígonos (o marcadores), pero aún no he podido probarlo yo mismo (debido al requisito del lado del servidor).

Gary
fuente