Clustering des pictos ?

Problème/bug rencontré sur le site, évolution/amélioration à proposer
Avatar du membre
Dominique
Messages : 2979
Enregistré le : 08 avr. 2006, 21:58
Localisation : Chaville 92
Contact :

Clustering des pictos ?

Message par Dominique »

Dans le cadre des remarques de Léo, j’ai regardé ce qu’on peut faire pour n’afficher qu’un picto « groupe » là ou les pictos unitaires sont trop denses.

Il y a 3 solutions :
- Le faire avec Openlayers dans l’explorateur.
La fonction ol.source.Cluster est là pour ça : https://openlayers.org/en/latest/examples/cluster.html
Problème : si on zoom sur le monde (ou une zone très large) le serveur mouline tous les points de la base et les envoie à l’explo qui les groupe. Voilà qui risque de faire ramer le serveur (et le réseau)

- Le faire en SQL dans le serveur
La fonction ST_ClusterWithin est là pour ça, avec un peu de post traitement pour transformer les GeometryColections générées pour un groupe de points en un picto « nombre »
L'avantage est de ne pas envoyer tous les pictos de la base quand le groupe est grand mais ça risque de ramer quand même un peu sur SQL car il rend des GeometryColections contenant tous les points groupés (ce qui n'arrive pas quand on met seulement un LIMIT = 250)
A noter que ClusterWithin existe en PgSql et pas en MySql :?
Pas mal, mais on risque d’augmenter la complexité la superfonction SQL d’extraction (à moins qu’on en profite pour la « casser » en fonctions plus petites ?

- Ne rien faire (ça énerve les :ours: )

Des avis avant que je me lance là-dedans ?
(j’aime pas PG)
Avatar du membre
leosw
Messages : 500
Enregistré le : 28 févr. 2013, 17:28
Localisation : Isère
Contact :

Re: Clustering des pictos ?

Message par leosw »

Salut !

J'ai un avis sur la question. Je ne trouve pas les clusterings graphiquement intéressants : on doit cliquer un peu partout, ça ne représente pas bien la répartition géographique, ça nécessite pas mal de bande passante (car tout est envoyé)...

Je trouve la solution adoptée par Geocaching pas mal : sur les petits niveaux de zoom, générer des tuiles avec les pictogrammes et les ajouter en overlay, et sur les grands niveaux de zoom laisser tel quel.
Ça limite les calculs sur le navigateur de l'utilisateur, et ça donne une image réaliste.

Freins :
1. À quelle fréquence réactualiser les tuiles (1/semaine)
2. Que faire si quelqu'un clique sur un pictogramme d'une tuile (ouvrir le point le plus proche à moins de 3km ?)
3. Calque vecteur ou raster ?

Léo
Avatar du membre
Dominique
Messages : 2979
Enregistré le : 08 avr. 2006, 21:58
Localisation : Chaville 92
Contact :

Re: Clustering des pictos ?

Message par Dominique »

Ta solution me donne une idée : utiliser la couche "massifs" comme couche d'agrégats pour les zooms larges.
Avatar du membre
sly
Messages : 4157
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Re: Clustering des pictos ?

Message par sly »

Bon, je suis silencieux sur ce sujet et le retour d'expé utilisateur fourni par léo mais pas du tout car je m'en fiche, mais plutôt car je ne sais pas par quel bout le prendre pour y répondre car c'est en entremêlement de bof, pour, contre, indécis ou génial.
Et comme je souhaite argumenter mon avis, je voudrais me poser le temps de formuler une réponse, mais j'ai pas réussi alors je vais tenter de le découper par morceaux.


Clustering des pictos donc, et bien j'ai un a priori plutôt négatif car :
- j'ai peur que ça ralentisse le premier affichage
- les exemples que je connais me sont désagréables en terme de manipulation, de sensation de vue tronquée (on me clusterize la vue sans raisons valables) et de lenteur.

Prenons un cas concret ; s'ils me lisent, ne le prenez pas mal, c'est justement pour voir ce qui peut être amélioré :

Rendez vous sur https://www.pyrenees-refuges.com/ à l'aide de votre smartphone, le mien est de 2014, page d'accueil, avec une 4G qui marche bien et balladez vous entre zoom pour afficher tous les pyrénéés et zoom proche pour voir les refuges.

Comment dire... c'est lent, très lent. Une fois zoomé, on est mieux en réactivité, mais passe alors au problème curieux suivant :
tt.jpeg
tt.jpeg (197.09 Kio) Vu 581 fois
Pourquoi avoir clusterisé ce groupe de 2 ou de 3, y'avait bien de la place pour mettre des icônes, là, je ne sais pas s'il y a des refuges dans la zone qui m'intéresse, je suis obligé de zoomer encore, reperdre du temps.
Vous me direz, c'est sûrement un réglage

Après, si on restreint aux faibles zoom ce clustering, bon, pourquoi pas. En restant intelligent du genre : si y'a de la place, on les place, si tassé, ok, on met une puce "y'en a 50 là dedans"

A noter cette variante :
https://paraglidingearth.com/

qui s'en sort mieux en terme de réactivité et de choix de clustering
(et pis y'a pas, on l'a eu à un moment et ça me manque, mais afficher le nom sur une carte quelle idée génial ! .......)
Avatar du membre
Dominique
Messages : 2979
Enregistré le : 08 avr. 2006, 21:58
Localisation : Chaville 92
Contact :

Re: Clustering des pictos ?

Message par Dominique »

sly a écrit : 07 juin 2021, 17:15- j'ai peur que ça ralentisse le premier affichage
- les exemples que je connais me sont désagréables en terme de manipulation, de sensation de vue tronquée (on me clusterize la vue sans raisons valables) et de lenteur.
J'ai fait une petite maquette. A essayer sur ton téléphone très lent :
http://dom.refuges.info/MyOl1/examples/newvector.html
Mais sur les zooms larges, je pense afficher plutôt la carte des massifs.

sly a écrit : 07 juin 2021, 17:15Pourquoi avoir clusterisé ce groupe de 2 ou de 3, y'avait bien de la place pour mettre des icônes,
J'ai essayé de déclusteriser un groupe de 2 alors qu'ils étaient trop proches et ça donne une icone en cachant une autre.
J'ai mis le paramètre : clusteriser tout ce qui est plus proche que 8 pixels. En dessous, c'est inexploitable

sly a écrit : 07 juin 2021, 17:15afficher le nom sur une carte quelle idée génial !
ça donne ça : http://dom.refuges.info/MyOl2/examples/newvector.html
Franchement, sur des zones denses, c'est pas le pied
aphyl
Messages : 2
Enregistré le : 10 juin 2021, 09:51

Re: Clustering des pictos ?

Message par aphyl »

Bonjour, pour minimiser le trafic réseau, une solution est de partir du centre de la carte par exemple et de ne renvoyer que les items inférieurs à une certaine distance (cette distance pouvant varier avec le niveau de zoom)
Par contre, je ne sais pas si cela serait complexe à mettre en œuvre sur votre site
Avatar du membre
sly
Messages : 4157
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Re: Clustering des pictos ?

Message par sly »

Je crois que c'est tout à fait réaliste, on à l'outil sous le capot pour le faire.

Et ça me rappel ce site : Keepright sur lequel j'allais souvent.

Ergonomiquement c'est surprenant d'avoir l'impression "qu'on nous cache les choses" mais à l'usage, c'est assez clair que se regroupement centré signifie : "t'as pas assez zoomé pour qu'on te montre tout"

Dans la même idée, qui est de signaler à l'utilisateur qu'il faut qu'il zoom pour en voir plus, on avait par le passé un message en rouge à gauche qui disait, dès qu'on atteignait la limite un truc genre "zoom insuffisant, seul 250 points sont affichés"

Mais je ne dis pas que ce sont les bonnes solutions, je suis aussi ouvert aux essais de clustering.

Et pis bon, à la fin, perso, je fonctionne toujours pareil, je fini par zoomer jusqu'a ce que tout s'affiche, parce que pour ces densités, ça colle à la fin bien avec le zoom carte qui m'est de toute façon nécessaire. Donc en étant extrémiste, je dirais que ne rien n'afficher me conviendrait tout autant
Avatar du membre
sly
Messages : 4157
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Re: Clustering des pictos ?

Message par sly »

Dominique a écrit : 07 juin 2021, 20:39 J'ai fait une petite maquette. A essayer sur ton téléphone très lent :
http://dom.refuges.info/MyOl1/examples/newvector.html
Ça réagit plutôt bien.
Le OpenLayers ne semble pas ajouter les mêmes lourdeurs d'effets bling-bling comme sur PRC (ou autre raison) qui font que ça réagit bien au déplacement/zoom
En terme de transfert, le fond d'écran et finalement largement le plus consommateur depuis que j'ai bien divisé par ~10 la taille de renvoi par l'api (compression et ménage) et vu que tu ne charges tout qu'une fois, ça ne se ressent pas ensuite.

Dominique a écrit : 07 juin 2021, 20:39 ça donne ça : http://dom.refuges.info/MyOl2/examples/newvector.html
Franchement, sur des zones denses, c'est pas le pied
C'est vrai, mais dès qu'on zoom un peu, ça devient plutôt intéressant et j'aime bien.
En ajoutant l'altitude très utile, et en évitant un bleu en gras qui chevauche l'icône je suis sûr que ça donnerait au premier coup d'oeil de l'info utile sans devoir frénétiquement passer sa souris sur chaque picto.

Je me demande où je vais chercher l'idée ;-)
présentation-IGN.png
présentation-IGN.png (452.5 Kio) Vu 517 fois
Avatar du membre
Dominique
Messages : 2979
Enregistré le : 08 avr. 2006, 21:58
Localisation : Chaville 92
Contact :

Re: Clustering des pictos ?

Message par Dominique »

aphyl a écrit : 10 juin 2021, 14:59 Bonjour, pour minimiser le trafic réseau, une solution est de partir du centre de la carte par exemple et de ne renvoyer que les items inférieurs à une certaine distance (cette distance pouvant varier avec le niveau de zoom)
Par contre, je ne sais pas si cela serait complexe à mettre en œuvre sur votre site
Nous utilisons la technique "BBox" qui ne demande au serveur que les points à l'intérieur de la zone visible.
Si on zoome plus large, on redemande une zone plus large.
Comme le site ne commence que par des cartes locales (une cabane, un massif) l'ensemble de la base n'est que rarement demandé.
Ce ne serait le cas pour quelqu'un voulant afficher le monde (zoom 1) mais ça ne doit pas être fréquent.

La différence entre la méthode clustering et la méthode actuelle (limitation à 250 points) est que, une fois une les points d'une zone reçus, si on zoome plus serré, on ne redemande rien au serveur puisque l'explorateur a déjà toutes les infos.
Alors qu'avec la méthode actuelle, comme on court le risque ne n'avoir reçu qu'une partie des points avec un zoom large, je force la demande à chaque pas de zoom.
Donc, bizarrement, la méthode clustering devrait générer un trafic moindre et un affichage plus rapide.
Avatar du membre
sly
Messages : 4157
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Re: Clustering des pictos ?

Message par sly »

Dominique a écrit : 10 juin 2021, 17:20 Donc, bizarrement, la méthode clustering devrait générer un trafic moindre et un affichage plus rapide.
J'imagine que la réponse est plutôt "ça dépend" : du comportement de l'internaute d'une part : si sa porte d'entrée sur la carte se fait par un massif précis, un permalink précis ou une fiche de point existant, il y a des chances que quelques points seulement soient récupérés avant son prochain clic.
et de comment c'est codé : s'il ne zoom pas mais slide la carte, soit on a tout récupéré avant et ça pourrait être trop lourd par rapport au besoin potentiel, soit on n'a clusterisé que la vue et il va falloir alors télécharger tout à nouveau pour un coût plus grand que celui avec limite des 250.

Et le système hybride zoom fort/zoom faible demande de coder un peu plus encore de spécificités. Mais ça, à toi de nous dire !

Bref, pas sûr qu'il y ait une réponse unique.

Coté Openstreetmap et rendu de cartes vectorielles autrement plus massives en données, la mode du moment c'est le rendu vectoriel coté navigateur avec un système de tuile vectorielles : certains appels mutualisent la même donnée de sorte qu'un pan ne charge que ce qui manque, et les "tuiles" vecto contiennent des versions simplifiés de la données selon niveau de zoom.
Avatar du membre
Dominique
Messages : 2979
Enregistré le : 08 avr. 2006, 21:58
Localisation : Chaville 92
Contact :

Re: Clustering des pictos ?

Message par Dominique »

Une petite idée de ce que pourrait être la carte.
https://dom.refuges.info/MyOl3/examples/newvector.html

Je pense que dans le sélecteur (que je n'ai pas encore fait) on peut ne sélectionner que les logements par défaut (et pas les cols, lacs ou sommets)

sly a écrit : 10 juin 2021, 18:06s'il ne zoom pas mais slide la carte, soit on a tout récupéré avant et ça pourrait être trop lourd par rapport au besoin potentiel, soit on n'a clusterisé que la vue et il va falloir alors télécharger tout à nouveau pour un coût plus grand que celui avec limite des 250.
C'est vrai et je ne vois pas comment l'éviter simplement mais le passage en massifs (non bboxées) au delà d'un certain zoom limite le nombre de points à ce qu'on a aujourd'hui.

sly a écrit : 10 juin 2021, 18:06Coté Openstreetmap et rendu de cartes vectorielles autrement plus massives en données, la mode du moment c'est le rendu vectoriel coté navigateur avec un système de tuile vectorielles : certains appels mutualisent la même donnée de sorte qu'un pan ne charge que ce qui manque, et les "tuiles" vecto contiennent des versions simplifiés de la données selon niveau de zoom.
J'aime bien mais je te laisse le codage côté serveur :) (avec étiquettes et survol...
Répondre