Projet

Général

Profil

Development #21048

carto : option pour créer des clusters de point

Ajouté par Frédéric Péters il y a plus de 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
08 janvier 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Sur une cellule de type carte pouvoir décider de regrouper les points en clusters, via un plugin genre https://github.com/Leaflet/Leaflet.markercluster.

(ici le taf côté combo, à côté il faudra que le module js choisi soit mis à disposition en xstatic, pas copié dans combo, ni récupéré d'un cdn)


Fichiers

0001-maps-add-option-to-clusterize-markers-21048.patch (7,37 ko) 0001-maps-add-option-to-clusterize-markers-21048.patch Serghei Mihai, 13 février 2018 10:34
markers_clustering.png (352 ko) markers_clustering.png Serghei Mihai, 13 février 2018 10:35
carte.png (557 ko) carte.png Serghei Mihai, 13 février 2018 14:49
bigger_clusters.png (556 ko) bigger_clusters.png Serghei Mihai, 13 février 2018 16:02
0001-maps-add-option-to-clusterize-markers-21048.patch (8,66 ko) 0001-maps-add-option-to-clusterize-markers-21048.patch Serghei Mihai, 13 février 2018 16:16
Screenshot-2018-2-13 Compte Citoyen - Stations Vélo_v.png (521 ko) Screenshot-2018-2-13 Compte Citoyen - Stations Vélo_v.png Frédéric Péters, 13 février 2018 16:33
0001-maps-add-option-to-clusterize-markers-21048.patch (9,46 ko) 0001-maps-add-option-to-clusterize-markers-21048.patch Serghei Mihai, 14 février 2018 10:54
carte.png (603 ko) carte.png Serghei Mihai, 14 février 2018 10:56
0001-maps-add-option-to-clusterize-markers-21048.patch (10,6 ko) 0001-maps-add-option-to-clusterize-markers-21048.patch Serghei Mihai, 14 février 2018 14:51
carte1.png (593 ko) carte1.png Serghei Mihai, 14 février 2018 14:51
carte2.png (741 ko) carte2.png Serghei Mihai, 14 février 2018 14:51
carte3.png (643 ko) carte3.png Serghei Mihai, 14 février 2018 14:51
carte_all.png (632 ko) carte_all.png Serghei Mihai, 14 février 2018 17:33
0001-maps-add-option-to-clusterize-markers-21048.patch (9,69 ko) 0001-maps-add-option-to-clusterize-markers-21048.patch Serghei Mihai, 14 février 2018 17:33
Screenshot-2018-2-14 Compte Citoyen - Stations Vélo_v.png (159 ko) Screenshot-2018-2-14 Compte Citoyen - Stations Vélo_v.png Frédéric Péters, 14 février 2018 18:01
Screenshot-2018-2-14 Compte Citoyen - Stations Vélo_v(1).png (161 ko) Screenshot-2018-2-14 Compte Citoyen - Stations Vélo_v(1).png Frédéric Péters, 14 février 2018 18:10
0001-maps-add-option-to-clusterize-markers-21048.patch (9,65 ko) 0001-maps-add-option-to-clusterize-markers-21048.patch Serghei Mihai, 14 février 2018 18:35
test.png (506 ko) test.png Serghei Mihai, 15 février 2018 07:57
0001-maps-add-option-to-clusterize-markers-21048.patch (9,51 ko) 0001-maps-add-option-to-clusterize-markers-21048.patch Serghei Mihai, 15 février 2018 07:57

Demandes liées

Lié à Publik - Development #16528: Utiliser un plugin leaflet de clustering des points (avec dépliage auto) dans les cartes combo et w.c.s.Nouveau28 mai 2017

Actions

Révisions associées

Révision ce7386ff (diff)
Ajouté par Serghei Mihai il y a environ 6 ans

maps: add option to clusterize markers (#21048)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 6 ans

  • Lié à Development #16528: Utiliser un plugin leaflet de clustering des points (avec dépliage auto) dans les cartes combo et w.c.s. ajouté
#4

Mis à jour par Serghei Mihai il y a environ 6 ans

  • Assigné à mis à Serghei Mihai
#5

Mis à jour par Serghei Mihai il y a environ 6 ans

#6

Mis à jour par Thomas Noël il y a environ 6 ans

Dans l'usage que je connais de markercluster il y a un affichage intéressant du nombre de point recouvert par le cluster (cf ici https://github.com/Leaflet/Leaflet.markercluster) ; ce n'est pas possible ici ?

En fait plus généralement, je ne suis pas sûr que les gens comprennent de quoi il est question ici, on a l'impression qu'on a pointé des parking alors qu'en fait pas du tout, c'est juste un point déposé "au barycentre" (et donc, déjà, il ne devrait pas avoir la forme d'une goutte)

Pour qu'on pige mieux, tu pourrais faire une copie d'écran sans / avec ?

#7

Mis à jour par Frédéric Péters il y a environ 6 ans

Côté code, if (group_markers == 'True') me pose trop de questions (genre est-ce une évaluation bizarre de plus de javascript ?). Plutôt que se baser sur le str(bool) de Python, je préférerais un truc explicite genre {% if group_markers %}data-group-markers="1"{% endif %} et dans le js alors if ($map_widget.data('group_markers')).

Côté rendu, comme dit Thomas, mais aussi, question sur le comportement quand il y a plusieurs séries de marqueurs affichées, la situation idéale selon moi c'est qu'ils ne se trouvent pas mêlés lors du clustering, à chaque type de données son clustering (et la couleur attribuée à la couche peut être utilisée pour le rond/nombre du cluster). (mais si c'est trop galère, tant pis, créer un ticket pour plus tard).

#8

Mis à jour par Serghei Mihai il y a environ 6 ans

Pour répondre à la question de Thomas, voici une capture avec les marqueurs non regroupés.
Sur la capture précedente il y a les marqueurs avec les voitures et puis les clusters à cause du niveau de zoom.

#9

Mis à jour par Frédéric Péters il y a environ 6 ans

Sur la capture précedente il y a les marqueurs avec les voitures et puis les clusters à cause du niveau de zoom.

C'est en le lisant ici et en scrutant la capture précédente que je les distingue enfin; il y a du travail côté style pour rendre ça plus visible, c'es étrange qu'un marqueur soit plus visible que 10 marqueurs réunis.

#10

Mis à jour par Thomas Noël il y a environ 6 ans

Frédéric Péters a écrit :

Sur la capture précedente il y a les marqueurs avec les voitures et puis les clusters à cause du niveau de zoom.

C'est en le lisant ici et en scrutant la capture précédente que je les distingue enfin; il y a du travail côté style pour rendre ça plus visible, c'es étrange qu'un marqueur soit plus visible que 10 marqueurs réunis.

Ah oui, pareil, je les avait complétement raté. Il faut redéfinir iconCreateFunction un peu comme on le faut avec pointToLayer (peut-être un truc un peu plus gros, genre)

#11

Mis à jour par Serghei Mihai il y a environ 6 ans

Ok.
Avec les cercles plus grands (exemple dans la capture jointe).

Pour avoir la même couleur du cluster que celles des marqueurs qu'il regroupe, je préfère qu'on en parle dans un autre ticket, car dans le ode JS reçoit qu'une seule source geojson, sans distinction de quelle couche ça vient.

#12

Mis à jour par Frédéric Péters il y a environ 6 ans

en parle dans un autre ticket

Je donnais explicitement la possibilité d'en créer un.

#13

Mis à jour par Frédéric Péters il y a environ 6 ans

Avec les cercles plus grands (exemple dans la capture jointe).

Mais il n'y a pas que la taille qui compte; clairement ici l'opacité qui doit être à genre 50% rend les clusters trop peu visibles.

D'un point de vue harmonie, les marqueurs sont opaques, que les clusters le soient aussi; ils pourraient être ronds et genre fond gris #333 avec le nombre dans un disque blanc et en gras, genre.

#14

Mis à jour par Frédéric Péters il y a environ 6 ans

En gardant leurs couleurs de base selon la taille des clusters, je pense à quelque chose comme la pièce jointe.

display: block;
background: white;
border-radius: 30px;
transform: scale(0.9);
font-size: 200%;
font-weight: bold;
#15

Mis à jour par Serghei Mihai il y a environ 6 ans

En partant un peu de ton idée, et garder la couleur de fond originale, un peu opaque.

Charge au thème après de rajouter/ecraser des propriétés.

#16

Mis à jour par Frédéric Péters il y a environ 6 ans

Charge au thème après de rajouter/ecraser des propriétés.

Encore et toujours je préférerais quand même que par défaut le résultat soit correct; le halo de couleur ne correspond pas à ce qui a lieu sur les marqueurs. Je suis aussi curieux de ta taille de police sur un nombre à trois chiffres.

Aussi, à regarder maintenant les fichiers MarkerCluster.css et MarkerCluster.Default.css, je trouve dommage de devoir faire deux requêtes HTTP pour ça, on devrait avoir tout le nécessaire dès notre combo.map.css.

        data-tile-urltemplate="{{ tile_urltemplate}}" data-map-attribution="{{ map_attribution}}"{% if group_markers %}
        data-group-markers="1"{% endif %}

Mettre la condition sur sa propre ligne serait quand même plus lisible.

                                              var icon_size = 60;
                                              var cluster_size = icon_size - 10;
                                              var childCount = cluster.getChildCount();
                                              var icon_html = '<div style="height:'+cluster_size+'px;width:'+cluster_size+'px;border-radius:'+icon_size/2+'px"><span style="line-height:'+cluster_size+'px">'+childCount+'</span></div>';

Disposant du contrôle des CSS, on ne devrait pas mettre des propriété fixes dans l'attribut style. (ça oblige à utiliser !important dans les css et c'est très mal)

#17

Mis à jour par Serghei Mihai il y a environ 6 ans

Ok pour reprendre les styles dans combo.map.scss.
La taille de la police se réduit en fonction de la classe appliquée au marqueur (exemples en PJ).

#18

Mis à jour par Frédéric Péters il y a environ 6 ans

La taille de la police se réduit en fonction de la classe appliquée au marqueur (exemples en PJ).

Mais le 4 prend plus de place que le 10, ce n'est pas terrible (je trouve). (oui j'étais trop content avec mon style)

-webkit-transition et les autres lignes avec préfixe de vendeur, ce n'est vraiment plus nécessaire.

Et je dégagerais aussi la partie IE6-8. Et les choses devenant ainsi plus claires, avec très peu de choses répétées, je ne passerais pas par une variable $cluster_markers et mettrais les règles directement.

#20

Mis à jour par Frédéric Péters il y a environ 6 ans

background: #fff mais background-color: rgb(181, 226, 140); partout utiliser la même notation. font-size:200% manque un espace. (et je ne trouve toujours pas cette variation de la taille de police pertinente, mais j'abandonne).

'<div><span>'+childCount+'</span></div>'; ici aussi des espaces.

new L.DivIcon({ html mais ici, après l'accolade, non.

#21

Mis à jour par Frédéric Péters il y a environ 6 ans

Je ne sais pas ce qui se paramètre côté cluster mais en utilisant le code actuel j'ai des clusters qui se superposent (cf capture).

#22

Mis à jour par Frédéric Péters il y a environ 6 ans

Mais têtu en appliquant le style que je souhaitais, au niveau du thème, ça passe (cf capture); si jamais tu as vu un paramètre pouvant influencer le comportement, cool, mais sinon, on passe.

#23

Mis à jour par Serghei Mihai il y a environ 6 ans

Patch à jour avec les remarques de plus haut.

Pas d'idée pour l'instant du phénomène que tu constates en local.
Tu peux me pointer tes sources geojson pour que je réproduise?

#24

Mis à jour par Frédéric Péters il y a environ 6 ans

Pour pouvoir exploiter davantage les données, l'accès à l'attribut geo_json est nécessaire, j'ai donc besoin de le garder même en mode cluster.

Et pour avoir accès aux événements spécifiques (en l'espèce, spiderify), j'ai aussi besoin d'un accès au L.markerClusterGroup que tu crées :

--- a/combo/apps/maps/static/js/combo.map.js
+++ b/combo/apps/maps/static/js/combo.map.js
@@ -27,6 +27,8 @@ $(function() {
                       return L.marker(latlng, {icon: marker});
                   }
               });
+              if (map.geo_json) map.geo_json.remove();
+              map.geo_json = geo_json;
               if ($map_widget.data('group-markers')) {
                   var markers = L.markerClusterGroup({showCoverageOnHover: false,
                                           zoomToBoundsOnClick: true,
@@ -47,9 +49,8 @@ $(function() {
                                               }});
                   markers.addLayer(geo_json);
                   map.addLayer(markers);
+                  map.clustered_markers = markers;
               } else {
-                  if (map.geo_json) map.geo_json.remove();
-                  map.geo_json = geo_json;
                   geo_json.addTo(map);
               }
               if (callback) {
#26

Mis à jour par Frédéric Péters il y a environ 6 ans

    &-small {
        background: #b5e28c;
        div {
            font-size: 200%;
        }
    }
    &-medium {
        background-color: #f1d357;
        div {
            font-size: 200%;

Une fois background une fois background-color je ne comprends même pas comment un patch peut régresser sur des trucs pareils.

#27

Mis à jour par Serghei Mihai il y a environ 6 ans

Avec ces geojson je n'arrive pas réproduire le cas ou les clusters se superposent.
J'ai appliqué des thèmes différents pour voir s'il y a une différence, mais non.

#28

Mis à jour par Frédéric Péters il y a environ 6 ans

Ok, passons ainsi, ack.

#29

Mis à jour par Serghei Mihai il y a environ 6 ans

  • Statut changé de En cours à Résolu (à déployer)
commit ce7386ffd6e6a25011612c050d1525e0db58c1b5 (origin/master)
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Mon Feb 12 19:20:18 2018 +0100

    maps: add option to clusterize markers (#21048)
#30

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF