Melhor maneira de animar dados de radar em openlayers


9

Eu tenho um projeto usando OpenLayers que exibe dados de radar em um mapa. Os dados do radar são apenas um monte de polígonos, cada um deles preenchido com uma das 6 cores possíveis. O objetivo é animar o radar no mapa. Cada arquivo contém dados de radar por um determinado tempo e os arquivos são separados por cerca de 5 minutos, portanto, minha abordagem atual é percorrer todos os arquivos e carregá-los um a um em novas camadas separadas. Depois de criada, cada camada tem sua visibilidade definida como falsa e é adicionada ao mapa. Em seguida, animar as camadas usando um timer que ativa a visibilidade de uma camada e desativa a visibilidade da camada anterior. Atualmente, as camadas são todas vetoriais e os dados são carregados dos arquivos KML, embora os arquivos de dados possam ter praticamente qualquer formato que funcione melhor para este projeto.

O problema dessa abordagem é que, quando atingi um período de tempo bastante grande (cerca de 3 horas) de dados (equivalente a aproximadamente 36 camadas), o consumo de memória fica bastante alto (cerca de 250mb). O produto final deve ser capaz de lidar com até 18 horas de dados em um loop que, com base no número acima, exigiria mais de 1 GB de memória apenas para a animação e provavelmente travaria o navegador ou, pelo menos, o tornaria muito lento.

Tentei a mesma coisa usando camadas WMS para cada camada, mas o redesenho era muito lento (a animação muda de camada a cada 100ms) e o consumo de memória não era muito melhor que a versão vetorial.

Eu vasculhei a rede tentando encontrar algum exemplo de como fazer isso, mas até agora estou chegando de mãos vazias. Alguém aí tem alguma sugestão de como fazer isso? Vou aceitar todas as idéias que você tiver neste momento, já que estou preso há semanas há nenhuma resposta à vista.

Respostas:


9

Tente uma espécie de janela deslizante. Você pode armazenar em buffer 10 camadas por vez. Comece a destruir as camadas e removê-las do DOM e da memória quando atingir 10 camadas. Então, quando você atinge a camada 10, a camada 0-9 é destruída e as camadas 20-30 são carregadas com visibilidade para false. Isso fornecerá um buffer de cerca de 10 camadas, mas você poderá modificar sua tolerância conforme desejar para o desempenho. Se você achar que 20 camadas funcionam melhor, use 20.

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

Senhor, você é um gênio! Ainda não coloquei isso em prática, mas não vejo nenhuma razão para que isso não funcione, e o buffer ajustável significa que podemos personalizá-lo ainda mais para ambientes variados. Não posso agradecer o suficiente por esta sugestão!
TheOx

Obrigado, espero que funcione na prática. Deixe-nos saber como isso funciona.
CaptDragon

Acabei de concluir o teste inicial e está funcionando bem! Ainda há espaço para otimização no código, mas esse método mantém o espaço ocupado pela memória baixo e é configurável com base na memória e na largura de banda da máquina cliente. Mais uma vez obrigado pela excelente sugestão!
TheOx

Incrível, bom ouvir isso.
precisa saber é o seguinte

@CaptDragon: (ou TheOx) Seria possível postar em um exemplo de trabalho? Entendo a solução até certo ponto, mas ver um exemplo simples e o código ajudaria bastante, pois tenho praticamente o mesmo problema. Obrigado!
precisa saber é o seguinte

1

Você já pensou em simplificar as camadas de vetor para reduzir o tamanho do arquivo. Se os polígonos contiverem mais vértices do que o necessário para os fins da exibição, simplificar (suavizar) reduzirá o tamanho do arquivo com o custo de detalhes reduzidos. Não sei ao certo qual software você tem à sua disposição, mas vários aplicativos de desktop GIS contêm uma função de geoprocessamento para simplificar os recursos.


É uma boa ideia, mas infelizmente o projeto exige a exibição dos dados em sua resolução total. No entanto, lembrarei disso para algumas outras camadas de dados mais adiante, onde poderemos usar esse truque.
TheOx

1

Além de simplificar os dados (até um pouco pode economizar muito espaço), você tentou o MapServer ou alguma outra maneira de transformar seus dados em blocos com transparência e criar uma camada de mapa para ficar em cima da camada de plano de fundo. Eu já vi essa abordagem com mapas de choropleth que têm centenas a centenas de milhares de polígonos (ou marcadores), mas ainda não consegui tentar (devido ao requisito do lado do servidor).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.