Numero massimo di funzioni punto in un livello vettoriale OpenLayers


27

Nella tua esperienza, quante funzioni punto possono essere aggiunte a un livello vettoriale OpenLayers (nuovo OpenLayers.Layer.Vector ("Point Layer")) prima che diventi insolitamente lento?

Il mio caso d'uso è quello di visualizzare i punti da una tabella del database. L'utente può decidere quale periodo di tempo visualizzare. Pertanto, il risultato può variare da pochissimi a potenzialmente 100.000 punti. Vorrei introdurre un limite ragionevole e avvisare l'utente se la sua query restituisse più funzionalità.


Esiste un browser standard in uso? Il limite sarà probabilmente diverso a seconda del browser che stai utilizzando.
Derek Swingley,

Principalmente Firefox. Non deve funzionare nei vecchi IE.
underdark

1
Invece di avvisare un utente, è possibile passare dalla richiesta di dati vettoriali alla restituzione dei punti come WMS / immagine.
geographika,

@geographika: di solito lo farei. Ma l'utente può anche decidere a quale database connettersi. Dovrei conoscere tutti i possibili database e averli disponibili tramite un WMS. Non hanno nemmeno installato PostGIS, prendo solo le colonne lat / lon.
underdark

Risposte:


38

Non ho una risposta definitiva per te ma tu ho creato una pagina in cui puoi giocare con diversi numeri di punti su una mappa OL: http://derekswingley.com/lab/olpts/


5
Derek dovrebbe esserci il badge "Grande risposta con esempio pratico". Bello vedere le differenze nei punti sovrastanti di velocità.
Mapperz

3
Molto interessante! Mi fa pensare al geoipsum. In alternativa, può essere utilizzato anche per testare le prestazioni: craigmmills.com/geoipsum (non so se esiste un limite numerico poligonale)
simo

1
@ So4ne che il sito del motore di app di Google è morto a un certo punto, lo stesso codice (quasi 5 anni) è qui: derekswingley.com/lab/olpts
Derek Swingley

1
@nospor fallout dal passaggio a https, aggiornato e il sito è tornato.
Derek Swingley,

1
@DerekSwingley Ho realizzato campioni aggiornati in base alla tua idea usando Leaflet, MapboxGL JS e OpenLayers 4 medium.com/@ThomasG77/… Ho messo dei crediti per il tuo campione
ThomasG77,

5

Se il display diventa lento a causa del numero di funzione troppo elevato, significa che i dati da visualizzare non sono adatti al livello di zoom. Di solito, quando la densità delle caratteristiche aumenta troppo, il display non può più essere letto (vedi questo esempio ). Anche se non vi fosse alcun limite di elaborazione e tutti i dispositivi di visualizzazione fossero in grado di visualizzare le funzioni 1000000000000 in 0,001s su un piccolo schermo, la visualizzazione rimarrebbe impossibile.

La legge radix del Töpfer afferma che la densità delle caratteristiche dovrebbe rimanere sotto una soglia costante qualunque sia il livello di zoom. Un modo per risolvere questo problema e adattare i dati alla scala di visualizzazione consiste nel trasformarli utilizzando operazioni di generalizzazione come questa o questa .


Sullo stesso argomento: gis.stackexchange.com/q/4096/162
Julien

2
Verissimo. E per quanto riguarda Openlayers, usa la strategia del cluster per gestirlo. Vedi esempio: openlayers.org/dev/examples/strategy-cluster.html
simo

1
Per la mia attuale applicazione, ho semplicemente collegato i punti (GPS) a linee (tracce). Ciò migliora già considerevolmente i tempi di rendering.
underdark

3

Non penso che non sia possibile dare una risposta concreta a questa domanda. I punti di rendering / poligoni dipendono completamente dal browser e dall'hardware (CPU e memoria) e non dagli OpenLayer. Ho avuto problemi con Openlayers e IE6 per uno dei rendering di Lake (Polygon). ma, si caricava bene in Firefox. E l'opzione migliore sarebbe monitorare l'utilizzo della memoria e della CPU con Chrome o alcuni strumenti sarebbero migliori.


1

Come altri, non ho una risposta in merito a quella domanda, ma l'applicazione di una strategia BBox potrebbe aiutarti a conservare solo i dati necessari poiché mostra solo le funzionalità che si trovano all'interno del riquadro di delimitazione dato.


1

In OpenLayers 6, esiste un renderizzatore di punti WebGL che dovrebbe consentire di eseguire il rendering di centinaia di migliaia di funzionalità, con filtri basati sul tempo. Potresti voler dare un'occhiata all'ultima versione del workshop ufficiale su https://openlayers.org/workshop/en/webgl/ .

Con OpenLayers 2, che non consiglio di utilizzare più, il massimo per un frame rate accettabile sarà solo di alcune centinaia di funzionalità.


0

Mi sono imbattuto in un caso d'uso simile, non sono sicuro che soddisfi le esigenze di cui sopra, ma Clusteringin OL 5 è quello che ho adottato.

Il raggruppamento come suggeriscono le parole prende un gruppo di punti e li unisce in un unico punto, ad esempio hai 100 punti in una città particolare tutti i punti saranno visibili come un punto da uno zoom di diciamo 4ma come punti singoli da uno zoom di andiamo diciamo 10che quello che puoi fare è quando lo zoom è 4che puoi unire quei punti come uno, ciò che fa aiuta a ridurre il numero di punti da renderizzare in una particolare area.

In altre parole, supponiamo che tu abbia 10.000 punti da visualizzare sulla mappa e che siano abbastanza vicini tra loro, quindi puoi crearne dei cluster e ridurne il rendering e quando l'utente ingrandisce continua a rompere i cluster. Ciò assicurerà di avere meno rendering e prestazioni migliori.

Prestazioni soddisfacenti. Link agli esempi di clustering su Openlayer


Potresti aggiungere un breve riassunto della pagina collegata? I collegamenti potrebbero rompersi nel tempo, lasciando la tua risposta inutile come è adesso.
Kantan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.