Maximale Anzahl von Punkt-Features in einer OpenLayers-Vektorebene

27

Wie viele Punkt-Features können Ihrer Erfahrung nach zu einer OpenLayers-Vektorebene (neue OpenLayers.Layer.Vector-Ebene ("Punktebene")) hinzugefügt werden, bevor sie ungewöhnlich langsam wird?

Mein Anwendungsfall ist die Anzeige von Punkten aus einer Datenbanktabelle. Der Benutzer kann entscheiden, welchen Zeitrahmen er visualisieren möchte. Daher kann das Ergebnis von sehr wenigen bis zu potenziell 100.000 Punkten reichen. Ich möchte eine angemessene Grenze einführen und den Benutzer warnen, wenn seine Abfrage mehr Funktionen zurückgeben würde.

Underdunkel
quelle
Wird ein Standardbrowser verwendet? Das Limit hängt wahrscheinlich davon ab, welchen Browser Sie verwenden.
Derek Swingley
Meistens Firefox. Es muss nicht in alten IEs funktionieren.
underdark
1
Anstatt einen Benutzer zu warnen, können Sie von der Anforderung von Vektordaten zur Rückgabe der Punkte als WMS / Bild wechseln.
Geographika
@geographika: Normalerweise würde ich das tun. Der Benutzer kann jedoch auch entscheiden, zu welcher Datenbank eine Verbindung hergestellt werden soll. Ich müsste alle möglichen Datenbanken kennen und über ein WMS verfügbar machen. Sie haben noch nicht einmal PostGIS installiert, ich hole nur Lat / Lon-Spalten.
underdark

Antworten:

38

Ich habe keine definitive Antwort für Sie, aber Sie haben eine Seite zusammengestellt, auf der Sie mit unterschiedlichen Punktzahlen auf einer OL-Karte herumspielen können : http://derekswingley.com/lab/olpts/

Derek Swingley
quelle
5
Derek, dafür sollte es ein Abzeichen mit der Aufschrift "Tolle Antwort mit praktischem Beispiel" geben. Gut zu sehen, welche Geschwindigkeitsunterschiede über den Punkten liegen.
Mapperz
3
Sehr interessant! Es bringt mich zum Nachdenken über das Geoipsum. Alternativ kann es auch verwendet werden, um die Leistung zu testen: craigmmills.com/geoipsum (ich weiß nicht, ob es ein Limit für die Anzahl der
Polygone
1
@ So4ne dass Google App Engine Website irgendwann gestorben ist, der gleiche (fast 5 Jahre alte) Code ist hier: derekswingley.com/lab/olpts
Derek Swingley
1
@Nospor Fallout von der Umstellung auf https, aktualisiert und die Website ist wieder da.
Derek Swingley
1
@DerekSwingley Ich habe aktualisiert Proben gemacht auf der Grundlage Ihrer Idee mit Leaflet, MapboxGL JS & Openlayers 4 medium.com/@ThomasG77/... ich Gutschriften für Ihre Probe gestellt
ThomasG77
5

Wenn die Anzeige aufgrund der zu hohen Feature-Nummer langsam wird, sind die anzuzeigenden Daten nicht für die Zoomstufe geeignet. Wenn die Feature-Dichte zu hoch ist, kann die Anzeige normalerweise nicht mehr gelesen werden (siehe dieses Beispiel ). Selbst wenn es keine Verarbeitungsbeschränkung gäbe und alle Anzeigegeräte in der Lage wären, 1000000000000 Merkmale in 0,001 s auf einem kleinen Bildschirm anzuzeigen, würde die Visualisierung unmöglich bleiben.

Das Töpfer-Radixgesetz besagt, dass die Feature-Dichte unabhängig von der Zoomstufe unter einem konstanten Schwellenwert bleiben sollte. Eine Möglichkeit, dieses Problem zu lösen und die Daten an die Visualisierungsskala anzupassen, besteht darin, sie mithilfe von Generalisierungsoperationen wie der einen oder anderen zu transformieren .

julien
quelle
Zum selben Thema: gis.stackexchange.com/q/4096/162
julien
2
Sehr richtig. Und in Bezug auf OpenLayer verwendet es eine Cluster-Strategie , um dies zu handhaben. Siehe Beispiel: openlayers.org/dev/examples/strategy-cluster.html
simo
1
Für meine aktuelle Anwendung habe ich die (GPS-) Punkte einfach mit Linien (Tracks) verbunden. Dadurch wird die Renderzeit bereits erheblich verkürzt.
Underdunkel
3

Ich glaube nicht, dass es nicht möglich ist, eine eindeutige Antwort auf diese Frage zu geben. Rendering-Punkte / Polygone hängen vollständig von Browser und Hardware (CPU & Speicher) ab, nicht von OpenLayers. Ich hatte ein Problem mit Openlayers und IE6 für eines der Lake (Polygon) -Rendering. Aber in Firefox wurde es gut geladen. Und die beste Option wäre, den Speicher- und CPU-Verbrauch mit Chrome zu überwachen, oder einige Tools wären besser.

Senthil
quelle
1

Wie andere habe ich keine Antwort auf diese Frage, aber die Anwendung einer BBox-Strategie kann Ihnen dabei helfen, nur die erforderlichen Daten zu speichern, da nur Features angezeigt werden, die sich innerhalb des angegebenen Begrenzungsrahmens befinden.

simo
quelle
1

In OpenLayers 6 gibt es einen WebGL-Punkt-Renderer, mit dem Sie hunderttausende von Features mit zeitbasierter Filterung rendern können. Die neueste Version des offiziellen Workshops finden Sie unter https://openlayers.org/workshop/en/webgl/ .

Mit OpenLayers 2, dessen Verwendung ich wirklich nicht mehr empfehle, liegt das Maximum für eine akzeptable Bildrate nur bei einigen hundert Funktionen.

ahocevar
quelle
0

Ich bin auf einen ähnlichen Anwendungsfall gestoßen, nicht sicher, ob er den oben genannten Anforderungen entspricht, aber Clusteringin OL 5 habe ich ihn übernommen.

Clustering, wie die Wörter vermuten lassen, nimmt eine Gruppe von Punkten und fügt sie zu einem einzigen Punkt zusammen. Sie haben beispielsweise 100 Punkte in einer bestimmten Stadt. Alle Punkte werden als ein Punkt aus einem Zoom von beispielsweise, 4aber als einzelne Punkte aus einem Zoom von beispielsweise, sichtbar sagen 10also , was Sie tun können , ist , wenn sich der Zoom 4Sie diese Punkte als einer beitreten können, was diese tut es die Verringerung der Anzahl der Punkte , hilft in einem bestimmten Bereich gemacht werden.

Mit anderen Worten, nehmen wir an, Sie haben 10.000 Punkte auf der Karte zu rendern und sie sind ziemlich nahe beieinander, sodass Sie daraus Cluster erstellen und das Rendern reduzieren können. Wenn der Benutzer zoomt, brechen Sie die Cluster immer wieder auf. Dadurch wird sichergestellt, dass Sie weniger Rendern und eine bessere Leistung erzielen.

Zufriedenstellende Leistung. Link zu Clustering-Beispielen auf Openlayern

Jashanpreet Bhullar
quelle
Könnten Sie bitte eine kurze Zusammenfassung der verlinkten Seite hinzufügen? Links können mit der Zeit brechen und Ihre Antwort unbrauchbar machen, so wie sie jetzt ist.
Kantan