Openlayers'ta radar verilerini canlandırmanın en iyi yolu


9

Bir harita üzerinde radar verileri görüntüleyen OpenLayers kullanarak bir projem var. Radar verilerinin kendisi, her biri 6 olası renkten biriyle dolu olan bir grup çokgen. Amaç radarı harita üzerinde canlandırmaktır. Her dosya belirli bir süre için radar verileri içerir ve dosyalar yaklaşık 5 dakika ile ayrılır, böylece mevcut yaklaşımım tüm dosyalar arasında döngü yapmak ve bunları yeni ayrı katmanlara tek tek yüklemek. Her katman oluşturulduktan sonra görünürlüğü false değerine ayarlanır ve haritaya eklenir. Daha sonra, bir katmanın görünürlüğünü açan ve bir önceki katmanın görünürlüğünü kapatan bir zamanlayıcı kullanarak katmanlara animasyon uygularım. Şu anda katmanların tümü vektör katmanlarıdır ve veri dosyaları bu proje için en iyi şekilde çalışacak herhangi bir formatta olabilse de veriler KML dosyalarından yüklenir.

Bu yaklaşımdaki sorun, oldukça büyük bir zaman aralığına (yaklaşık 3 saat kadar) (yaklaşık 36 katmana eşit) bir veriye çarptığımda bellek tüketiminin oldukça yüksek hale gelmesidir (yaklaşık 250mb). Nihai ürünün, yukarıdaki sayıya dayanarak sadece animasyon için 1GB'den fazla bellek gerektirecek ve muhtemelen tarayıcıyı çökertecek veya en azından çok yavaş hale getirecek bir döngüde 18 saate kadar veri işleyebileceği varsayılıyor.

Her katman için WMS katmanlarını kullanarak aynı şeyi denedim ama yeniden çizim çok yavaştı (animasyon her 100ms'de katmanları değiştiriyor) ve bellek tüketimi vektör versiyonundan çok daha iyi değildi.

Bunu nasıl yapılacağına dair bir örnek bulmaya çalışırken ağları temizledim ama şimdiye kadar boş elle geliyorum. Dışarıda bunun nasıl yapılacağına dair herhangi bir öneriniz var mı? Bu noktada sahip olduğunuz herhangi bir fikri alacağım, çünkü haftalarca bu konuya bakmadan cevap vermedim.

Yanıtlar:


9

Sürgülü pencereleri deneyin. Bir seferde 10 katman arabelleğe alabilirsiniz. 10 katmana ulaştığınızda katmanları yok etmeye ve bunları DOM ve bellekten kaldırmaya başlayın. 10 katmanına vurduğunuzda 0-9 katmanı yok edilir ve 20-30 katmanları görünürlükle false olarak yüklenir. Bu size yaklaşık 10 katmanlık bir tampon verecektir, ancak performansa uygun gördüğünüz gibi toleransınızı değiştirebilirsiniz. 20 katın daha iyi çalıştığını düşünüyorsanız 20 ile devam edin.

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

Siz bir dahisiniz! Bunu henüz uygulamaya koymadım, ancak çalışmaması için herhangi bir neden görmüyorum ve ayarlanabilir tampon, bunu farklı ortamlar için daha da özelleştirebileceğimiz anlamına geliyor. Bu öneri için sana yeterince teşekkür edemem!
TheOx

Teşekkürler, umarım pratikte çalışır. Nasıl çalıştığını bize bildirin.
CaptDragon

İlk testi tamamladım ve iyi çalışıyor! Kodda hala optimizasyon için yer var, ancak bu yöntem bellek ayak izini aşağıya çekiyor ve istemci makinenin belleğine ve bant genişliğine göre yapılandırılabilir. Mükemmel öneri için tekrar teşekkürler!
TheOx

Harika, bunu duymak güzel.
CaptDragon

@CaptDragon: (veya TheOx) Çalışan bir örnek yayınlamak mümkün müdür? Bir noktaya çözüm anlıyorum ama basit bir örnek görmek ve kod hemen hemen aynı sorun var gibi büyük ölçüde yardımcı olacaktır. Teşekkürler!
teknocreator

1

Dosya boyutlarını azaltmak için vektör katmanlarını basitleştirmeyi düşündünüz mü? Çokgenler ekranınız için gerekenden daha fazla köşe içeriyorsa, basitleştirmek (yumuşatmak) dosya boyutunu azaltılmış ayrıntı maliyetiyle azaltır. Hangi yazılımı kullandığınızdan emin değilim, ancak bazı GIS masaüstü uygulamaları özellikleri basitleştirmek için bir coğrafi işlem işlevi içeriyor.


Bu iyi bir fikir ama maalesef proje, verilerin tam çözünürlükte görüntülenmesini gerektiriyor. Ancak bu hileyi kullanabileceğimiz diğer veri katmanları için bunu aklımızda tutacağım.
TheOx

1

Verileri basitleştirmek dışında (çok az yer bile kapatabilirsiniz) MapServer'ı veya verilerinizi saydamlıkla döşemelere dönüştürmenin ve arka plan katmanının üzerine yerleştirilecek bir harita katmanı oluşturmanın başka bir yolunu denediniz. Bu yaklaşımı yüzlerce yüz binlerce çokgen (veya işaretleyici) içeren choropleth haritalarıyla gördüm, ancak henüz kendim deneyemedim (sunucu tarafı gereksinimi nedeniyle).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.