Número máximo de entidades de puntos en una capa vectorial OpenLayers

27

En su experiencia, ¿cuántas entidades de puntos se pueden agregar a una capa vectorial de OpenLayers (nuevo OpenLayers.Layer.Vector ("Capa de puntos")) antes de que se vuelva inusualmente lenta?

Mi caso de uso es mostrar puntos de una tabla de base de datos. El usuario puede decidir qué marco de tiempo visualizar. Por lo tanto, el resultado puede ser de muy pocos a potencialmente 100.000 puntos de puntos. Me gustaría introducir un límite razonable y advertir al usuario si su consulta devolvería más funciones.

bajo oscuro
fuente
¿Se está utilizando un navegador estándar? El límite probablemente será diferente según el navegador que esté utilizando.
Derek Swingley
Principalmente Firefox. No tiene que funcionar en viejos IE.
oscuro
1
En lugar de advertir a un usuario, puede pasar de solicitar datos vectoriales a devolver los puntos como un WMS / imagen.
geographika
@geographika: Por lo general, haría eso. Pero el usuario también puede decidir a qué base de datos conectarse. Tendría que conocer todas las bases de datos posibles y tenerlas disponibles a través de un WMS. Ni siquiera tienen instalado PostGIS, solo busco columnas lat / lon.
oscuro

Respuestas:

38

No tengo una respuesta definitiva para ti, pero te puse una página donde puedes jugar con diferentes números de puntos en un mapa OL: http://derekswingley.com/lab/olpts/

Derek Swingley
fuente
55
Derek debería haber una insignia de 'Gran respuesta con ejemplo práctico' para eso. Es bueno ver las diferencias en los puntos de velocidad superpuestos.
Mapperz
3
¡Muy interesante! Me hace pensar en el geoipsum. Alternativamente, también se puede usar para probar el rendimiento: craigmmills.com/geoipsum (no sé si hay un límite de número de polígono)
simo
1
@ So4ne que el sitio del motor de aplicaciones de Google murió en algún momento, el mismo código (de casi 5 años) está aquí: derekswingley.com/lab/olpts
Derek Swingley
1
Las consecuencias de @nospor cambian a https, se actualizan y el sitio vuelve.
Derek Swingley
1
@DerekSwingley. He realizado muestras actualizadas basadas en su idea usando Leaflet, MapboxGL JS y OpenLayers 4 medium.com/@ThomasG77/ ... Puse créditos para su muestra
ThomasG77
5

Si la visualización se vuelve lenta debido al número de función demasiado alto, significa que los datos a mostrar no son adecuados para el nivel de zoom. Por lo general, cuando la densidad de las funciones es demasiado alta, la pantalla ya no se puede leer (consulte este ejemplo ). Incluso si no hubiera un límite de procesamiento y todos los dispositivos de visualización pudieran mostrar las características 1000000000000 en 0.001s en una pantalla pequeña, la visualización seguiría siendo imposible.

La ley de radix de Töpfer establece que la densidad de características debe permanecer por debajo de un umbral constante, sea cual sea el nivel de zoom. Una forma de resolver este problema y adaptar los datos a la escala de visualización es transformarlo utilizando operaciones de generalización como esta u otra .

julien
fuente
Sobre el mismo tema: gis.stackexchange.com/q/4096/162
julien
2
Muy cierto. Y con respecto a Openlayers, utiliza la estrategia de clúster para manejar eso. Ver ejemplo: openlayers.org/dev/examples/strategy-cluster.html
simo
1
Para mi aplicación actual, simplemente conecté los puntos (GPS) a las líneas (pistas). Eso ya mejora el tiempo de renderizado considerablemente.
oscuro
3

No creo que sea posible dar una respuesta sólida a esta pregunta. Los polígonos / puntos de representación dependen completamente del navegador y el hardware (CPU y memoria) no con OpenLayers. Tuve problemas con Openlayers e IE6 para uno de los renderizados de Lake (Polygon). pero, se cargó muy bien en Firefox. Y la mejor opción sería monitorear el uso de la memoria y la CPU con Chrome o algunas herramientas serían mejores.

Senthil
fuente
1

Como otros, no tengo respuesta con respecto a esa pregunta, pero la aplicación de una estrategia BBox podría ayudarlo a mantener solo los datos necesarios, ya que muestra solo las características ubicadas dentro del cuadro delimitador dado.

simo
fuente
1

En OpenLayers 6, hay un renderizador de puntos WebGL que debería permitirle renderizar cientos de miles de características, con filtrado basado en el tiempo. Puede consultar la última versión del taller oficial en https://openlayers.org/workshop/en/webgl/ .

Con OpenLayers 2, que realmente no recomiendo usar más, el máximo de velocidad de fotogramas aceptable será de unos pocos cientos de características.

ahocevar
fuente
0

Me topé con un caso de uso similar, no estoy seguro de si satisfará las necesidades mencionadas anteriormente, pero Clusteringen OL 5 es lo que adopté.

La agrupación, como sugieren las palabras, toma un grupo de puntos y los fusiona en un solo punto, por ejemplo, tiene 100 puntos en una ciudad en particular, todos los puntos serán visibles como un punto desde un zoom de, digamos, 4pero como puntos individuales desde un zoom de digamos 10que lo que puedes hacer es cuando el zoom es 4que puedes unir esos puntos como uno solo, lo que esto hace ayuda a reducir la cantidad de puntos que se representarán en un área en particular.

En otras palabras, supongamos que tiene 10.000 puntos para representar en el mapa y están bastante cerca uno del otro, por lo que puede hacer grupos de ellos y reducir la representación y cuando el usuario hace zoom, sigue rompiendo los grupos. Esto asegurará que tenga menos renderizado y un mejor rendimiento.

Rendimiento satisfactorio. Enlace a ejemplos de Clustering en Openlayers

Jashanpreet Bhullar
fuente
¿Podría agregar un breve resumen de la página vinculada? Los enlaces pueden romperse con el tiempo, dejando su respuesta inútil como lo es ahora.
Kantan