Nombre maximal d'entités ponctuelles dans une couche vectorielle OpenLayers


27

D'après votre expérience, combien d'entités ponctuelles peuvent être ajoutées à une couche vectorielle OpenLayers (nouvelle OpenLayers.Layer.Vector ("Point Layer")) avant qu'elle ne devienne anormalement lente?

Mon cas d'utilisation est d'afficher des points à partir d'une table de base de données. L'utilisateur peut décider de la période à visualiser. Par conséquent, le résultat peut aller de très peu à potentiellement 100 000 points. Je voudrais introduire une limite raisonnable et avertir l'utilisateur si sa requête retournerait plus de fonctionnalités.


Un navigateur standard est-il utilisé? La limite sera probablement différente selon le navigateur que vous utilisez.
Derek Swingley

Surtout Firefox. Il n'a pas à fonctionner dans les anciens IE.
underdark

1
Plutôt que d'avertir un utilisateur, vous pouvez passer de la demande de données vectorielles au retour des points en tant que WMS / image.
geographika

@geographika: Habituellement, je le ferais. Mais l'utilisateur peut également décider à quelle base de données se connecter. Je devrais connaître toutes les bases de données possibles et les avoir disponibles via un WMS. Ils n'ont même pas PostGIS installé, je récupère juste les colonnes lat / lon.
underdark

Réponses:


38

Je n'ai pas de réponse définitive pour vous mais vous j'ai mis en place une page où vous pouvez jouer avec différents nombres de points sur une carte OL: http://derekswingley.com/lab/olpts/


5
Derek, il devrait y avoir un badge «Grande réponse avec un exemple pratique». C'est bien de voir les différences de vitesse qui recouvrent les points.
Mapperz

3
Très intéressant! Cela me fait penser au geoipsum. Alternativement, il peut également être utilisé pour tester les performances: craigmmills.com/geoipsum (je ne sais pas s'il y a une limite de nombre de polygones)
simo

1
@ So4ne que le site du moteur de l'application Google est mort à un moment donné, le même code (vieux de près de 5 ans) est ici: derekswingley.com/lab/olpts
Derek Swingley

1
@nospor retombées du passage à https, mis à jour et le site est de retour.
Derek Swingley

1
@DerekSwingley J'ai fait des échantillons mis à jour en fonction de votre idée en utilisant Leaflet, MapboxGL JS & OpenLayers 4 medium.com/@ThomasG77/… J'ai mis des crédits pour votre échantillon
ThomasG77

5

Si l'affichage ralentit en raison du nombre de fonctions trop élevé, cela signifie que les données à afficher ne sont pas adaptées au niveau de zoom. Habituellement, lorsque la densité des fonctionnalités devient trop élevée, l'affichage ne peut plus être lisible (voir cet exemple ). Même s'il n'y avait pas de limite de traitement et que tous les dispositifs d'affichage pouvaient afficher 1000000000000 de fonctionnalités en 0,001s sur un petit écran, la visualisation resterait impossible.

La loi radix du Töpfer stipule que la densité des caractéristiques doit rester sous un seuil constant quel que soit le niveau de zoom. Un moyen de résoudre ce problème et d'adapter les données à l'échelle de visualisation consiste à les transformer à l'aide d' opérations de généralisation comme celle-ci ou celle-ci .



2
Très vrai. Et en ce qui concerne Openlayers, il utilise une stratégie de cluster pour gérer cela. Voir l'exemple: openlayers.org/dev/examples/strategy-cluster.html
simo

1
Pour mon application actuelle, j'ai simplement connecté les points (GPS) à des lignes (pistes). Cela améliore déjà considérablement le temps de rendu.
underdark

3

Je ne pense pas qu'il soit impossible de donner une réponse solide à cette question. Les points / polygones de rendu dépendent entièrement du navigateur et du matériel (CPU et mémoire), pas avec OpenLayers. J'ai eu un problème avec Openlayers et IE6 pour l'un des rendus Lake (Polygon). mais, il s'est bien chargé dans Firefox. Et la meilleure option serait de surveiller la mémoire et l'utilisation du processeur avec Chrome ou certains outils seraient mieux.


1

Comme d'autres, je n'ai pas de réponse concernant cette question, mais l'application d'une stratégie BBox pourrait vous aider à conserver uniquement les données nécessaires car elle n'affiche que les fonctionnalités situées dans la zone de délimitation donnée.


1

Dans OpenLayers 6, il existe un rendu de point WebGL qui devrait vous permettre de rendre des centaines de milliers de fonctionnalités, avec un filtrage basé sur le temps. Vous voudrez peut-être consulter la dernière version de l'atelier officiel à https://openlayers.org/workshop/en/webgl/ .

Avec OpenLayers 2, que je ne recommande vraiment plus d'utiliser, le maximum de fréquence d'images acceptable ne sera que de quelques centaines de fonctionnalités.


0

Je suis tombé sur un cas d'utilisation similaire, je ne sais pas s'il conviendra aux besoins mentionnés ci-dessus, mais Clusteringdans OL 5, c'est ce que j'ai adopté.

Le regroupement, comme les mots le suggèrent, prend un groupe de points et les fusionne en un seul point, par exemple, vous avez 100 points dans une ville particulière, tous les points seront visibles comme un point à partir d'un zoom de disons, 4mais comme des points individuels à partir d'un zoom de let dites 10donc que ce que vous pouvez faire, c'est quand le zoom est que 4vous pouvez joindre ces points en un seul, ce que cela fait, cela permet de réduire le nombre de points à rendre dans une zone particulière.

En d'autres termes, disons que vous avez 10000 points à rendre sur la carte et qu'ils sont assez proches les uns des autres, vous pouvez donc en créer des grappes et réduire le rendu et lorsque l'utilisateur effectue un zoom avant, vous continuez à casser les grappes. Cela garantira que vous avez moins de rendu et de meilleures performances.

Des performances satisfaisantes. Lien vers des exemples de clustering sur Openlayers


Pourriez-vous s'il vous plaît ajouter un bref résumé de la page liée? Les liens peuvent se rompre avec le temps, laissant votre réponse inutile comme elle l'est maintenant.
Kantan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.