Beste Möglichkeit, Radardaten in Openlayern zu animieren


9

Ich habe ein Projekt mit OpenLayers, das Radardaten auf einer Karte anzeigt. Die Radardaten selbst sind nur eine Reihe von Polygonen, von denen jedes mit einer von 6 möglichen Farben gefüllt ist. Ziel ist es, das Radar auf der Karte zu animieren. Jede Datei enthält Radardaten für eine bestimmte Zeit und die Dateien sind etwa 5 Minuten voneinander entfernt. Mein aktueller Ansatz besteht darin, alle Dateien zu durchlaufen und sie einzeln in neue separate Ebenen zu laden. Sobald jeder Layer erstellt wurde, wird seine Sichtbarkeit auf false gesetzt und der Karte hinzugefügt. Ich animiere dann die Ebenen mit einem Timer, der die Sichtbarkeit einer Ebene aktiviert und die Sichtbarkeit der vorhergehenden Ebene deaktiviert. Derzeit sind die Ebenen alle Vektorebenen und die Daten werden aus KML-Dateien geladen, obwohl die Datendateien so ziemlich jedes Format haben können, das für dieses Projekt am besten geeignet ist.

Das Problem bei diesem Ansatz ist, dass der Speicherverbrauch ziemlich hoch wird (ungefähr 250 MB), sobald ich eine ziemlich große Zeitspanne (ungefähr 3 Stunden) von Daten erreicht habe (was ungefähr 36 Schichten entspricht). Das Endprodukt soll in der Lage sein, bis zu 18 Stunden Daten in einer Schleife zu verarbeiten, was basierend auf der obigen Anzahl mehr als 1 GB Speicher nur für die Animation erfordern würde und wahrscheinlich den Browser zum Absturz bringen oder ihn zumindest sehr träge machen würde.

Ich habe das gleiche versucht, indem ich WMS-Ebenen für jede Ebene verwendet habe, aber das Neuzeichnen war zu langsam (die Animation wechselt die Ebenen alle 100 ms) und der Speicherverbrauch war nicht viel besser als bei der Vektorversion.

Ich habe das Netz durchsucht, um ein Beispiel dafür zu finden, aber bisher bin ich mit leeren Händen aufgetaucht. Hat da draußen jemand Vorschläge, wie das geht? Ich nehme alle Ideen auf, die Sie an dieser Stelle haben, da ich seit Wochen daran festhalte und keine Antwort in Sicht bin.

Antworten:


9

Versuchen Sie es mit einer Art Schiebefenster. Sie können 10 Ebenen gleichzeitig puffern. Zerstören Sie Ebenen und entfernen Sie sie aus dem DOM und dem Speicher, sobald Sie 10 Ebenen erreicht haben. Sobald Sie also Ebene 10 treffen, werden Ebene 0-9 zerstört und die Ebenen 20-30 werden mit der Sichtbarkeit "Falsch" geladen. Auf diese Weise erhalten Sie einen Puffer von ca. 10 Ebenen. Sie können jedoch Ihre Toleranz nach Belieben für die Leistung ändern. Wenn Sie der Meinung sind, dass 20 Schichten besser funktionieren, wählen Sie 20.

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

Sie, mein Herr, sind ein Genie! Ich habe dies noch nicht in die Praxis umgesetzt, aber ich sehe keinen Grund dafür, dass es nicht funktioniert, und der einstellbare Puffer bedeutet, dass wir dies für verschiedene Umgebungen weiter anpassen können. Ich kann Ihnen nicht genug für diesen Vorschlag danken!
TheOx

Danke, ich hoffe es funktioniert in der Praxis. Lassen Sie uns wissen, wie es funktioniert.
CaptDragon

Gerade abgeschlossene erste Tests und es funktioniert gut! Der Code bietet noch einige Optimierungsmöglichkeiten, aber diese Methode reduziert den Speicherbedarf erheblich und kann basierend auf dem Speicher und der Bandbreite des Clientcomputers konfiguriert werden. Nochmals vielen Dank für den ausgezeichneten Vorschlag!
TheOx

Super, schön das zu hören.
CaptDragon

@CaptDragon: (oder TheOx) Wäre es möglich, auf ein funktionierendes Beispiel zu posten? Ich verstehe die Lösung bis zu einem gewissen Punkt, aber ein einfaches Beispiel und den Code zu sehen, würde sehr helfen, da ich so ziemlich das gleiche Problem habe. Vielen Dank!
Teknocreator

1

Haben Sie darüber nachgedacht, die Vektorebenen zu vereinfachen, um ihre Dateigröße zu verringern? Wenn die Polygone mehr Scheitelpunkte enthalten, als für die Anzeige benötigt werden, wird durch Vereinfachung (Glättung) der Dateigröße die Dateigröße reduziert und die Detailkosten reduziert. Ich bin nicht sicher, welche Software Ihnen zur Verfügung steht, aber mehrere GIS-Desktopanwendungen enthalten eine Geoverarbeitungsfunktion, um die Funktionen zu vereinfachen.


Es ist eine gute Idee, aber leider erfordert das Projekt die Anzeige der Daten in voller Auflösung. Ich werde dies jedoch für einige andere Datenschichten berücksichtigen, in denen wir diesen Trick möglicherweise anwenden können.
TheOx

1

Abgesehen von der Vereinfachung der Daten (selbst ein wenig kann viel Platz sparen) haben Sie MapServer oder eine andere Methode ausprobiert, um Ihre Daten in transparente Kacheln umzuwandeln und eine Kartenebene zu erstellen, die über der Hintergrundebene liegt. Ich habe diesen Ansatz mit Choroplethen-Karten gesehen, die Hunderttausende von Polygonen (oder Markierungen) enthalten, konnte ihn jedoch aufgrund der serverseitigen Anforderungen noch nicht selbst ausprobieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.