Vous avez déjà consulté une carte affichant des centaines, voire des milliers de points d'intérêt ? Sans hiérarchisation visuelle, le résultat est souvent illisible : les marqueurs se superposent, la carte devient confuse et l'information se perd. C'est précisément pour résoudre ce problème que les cartes en cluster ont été conçues.

Qu'est-ce qu'une carte en cluster ?

Une carte en cluster regroupe automatiquement les points proches les uns des autres en grappes visuelles. Chaque grappe affiche le nombre de points qu'elle contient. Lorsque l'utilisateur zoome sur la carte, ces grappes se divisent progressivement en groupes plus petits, jusqu'à révéler les marqueurs individuels.

Cette approche présente plusieurs avantages :

  • Lisibilité : même avec des milliers de points, la carte reste claire et exploitable
  • Performance : le navigateur n'a pas à afficher simultanément tous les marqueurs
  • Navigation intuitive : l'utilisateur contrôle le niveau de détail souhaité en zoomant
  • Identification des zones denses : les clusters révèlent instantanément où se concentrent les données

Les cas d'usage sont nombreux : localisation de points de vente, cartographie d'entreprises, visualisation de données épidémiologiques, répertoires immobiliers, ou encore suivi de flottes de véhicules.

Pourquoi choisir Leaflet pour vos cartes en clusters ?

Pour créer des cartes en cluster sur le web, plusieurs solutions existent. Leaflet, associé au plugin Leaflet.markercluster, s'est imposé comme une référence grâce à sa simplicité d'utilisation et ses performances.

La mise en place d'un clustering avec Leaflet nécessite simplement d'intégrer le plugin (quelques lignes de code), de préparer vos données au format JSON, et de créer un groupe de marqueurs spécial qui gère automatiquement le regroupement. Le plugin s'occupe de tous les calculs complexes : distances entre points, animation des transitions, subdivision des grappes selon le niveau de zoom.

Les alternatives pour le clustering cartographique

Google Maps propose également du clustering via sa bibliothèque MarkerClusterer, performante mais soumise aux quotas et à la tarification de l'API. Mapbox GL JS offre des fonctionnalités de clustering natives avec des rendus visuels sophistiqués, mais demande plus de ressources. OpenLayers intègre le clustering de façon native et convient aux applications cartographiques complexes, au prix d'une courbe d'apprentissage plus raide.

L'avantage de Leaflet pour débuter : sa légèreté, sa gratuité totale, et la richesse de sa documentation. Pour afficher des milliers de points sur une carte web sans se perdre dans la complexité technique, c'est un choix judicieux.

Créer votre première carte en cluster : l'exemple viticole

Le livre "Cartographie web avec Leaflet" de Richard Carlier propose un exemple concret et pédagogique : la visualisation des producteurs de vin en Bourgogne-Franche-Comté. La suite de cette section est extraite du livre.

La mise en place d'une carte à cluster est assez simple : on intègre le JavaScript du plugin Leaflet markercluster et sa CSS, on construit notre carte, et via une boucle, on crée un marqueur pour chacune de nos données, que l'on ajoute dans un L.markerClusterGroup (qu'il faudra ajouter au final à notre map).

Pour notre exemple, nous allons, grappes obligent, nous intéresser aux producteurs de vins en région Bourgogne-Franche-Comté. À cette fin, direction la base Si⁠re⁠ne pour extraire les producteurs de vin (code NAF 01.21Z) que nous géolocalisons. À noter que le distingo n'est pas fait entre établissements et sièges d'entreprise (une même entreprise peut donc apparaître plusieurs fois si elle possède plusieurs établissements).

Le fichier data/viticole.json aura cette structure :

[{ "count":156,"insee_com":"71294","code_postal":"71640",
   "commune": "Mercurey","lat": 46.8383,"lng": 4.7279},

Puis nous mettons en place les CDN du plugin, soit deux CSS et un JavaScript (bien mettre ce dernier après l'appel de Leaflet).

https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.css
https://unpkg.com/leaflet.markercluster@1.4.1/dist/MarkerCluster.Default.css
https://unpkg.com/leaflet.markercluster@1.4.1/dist/leaflet.markercluster.js

Notre carte sera centrée sur Mercurey (et j'en profite pour faire un coucou à mes parents qui y ont vécu quelques années).

let center = [46.8383, 4.7279];
let map = L.map("map").setView(center, 7);
L.tileLayer("https://tile.osm.org/{z}/{x}/{y}.png", {
  attribution: `© OpenStreetMap contributors`,
}).addTo(map);

Nous chargeons alors notre fichier, qui fera appel à une fonction pour tracer les clusters :

fetch("data/viticole.json")
  .then((response) => response.json())
  .then((data) => {
    drawClusters(data);
  });

Le plugin fonctionne en utilisant des marqueurs, qu'il va automatiquement regrouper, s'ils sont dans une instance de L.markerClusterGroup(). Donc, petite boucle pour créer nos marqueurs, que nous ajouterons à notre map. Tout en utilisant notre classique fitBounds pour zoomer sur la zone.

function drawClusters(data) {
  const markers = L.markerClusterGroup();
  let bounds = L.latLngBounds();
  data.forEach((point) => {
    const marker = L.marker([point.lat, point.lng]);
    marker.bindPopup(`<b>${point.commune}</b><br>
      ${point.count} producteur(s)`);
    markers.addLayer(marker);
    bounds.extend(marker.getLatLng());
  });
  map.addLayer(markers);
  map.fitBounds(bounds);
}
Figure 23.2. À consommer avec modération
leaflet-zkx3pty2-cluster-vinicole.png

Récapitulons

La mise en œuvre se déroule donc en quatre étapes :

  1. Intégration du plugin : ajout des fichiers CSS et JavaScript via CDN
  2. Création de la carte de base : initialisation d'une carte Leaflet classique
  3. Préparation des données : un fichier JSON contenant les coordonnées et informations de chaque producteur
  4. Génération des clusters : création d'un groupe de marqueurs spécial (L.markerClusterGroup()) qui gère automatiquement le regroupement

Le plugin s'occupe de tout le travail complexe : calcul des distances, regroupement dynamique, animation des transitions lors du zoom. Vous vous concentrez uniquement sur vos données.

Ce qu'on observe sur la carte

Le résultat est particulièrement parlant : la carte révèle les zones de forte concentration viticole en Bourgogne-Franche-Comté. En zoomant, les grappes se subdivisent progressivement, révélant la répartition précise des établissements viticoles jusqu'aux marqueurs individuels.

Pour aller plus loin

Cet article vous donne un aperçu des possibilités offertes par les cartes en cluster avec Leaflet. Le livre "Cartographie web avec Leaflet" de Richard Carlier approfondit ce sujet et bien d'autres :

  • Cartes thermiques pour visualiser la densité de données
  • Personnalisation avancée des marqueurs et popups
  • Intégration de données géographiques complexes
  • Optimisation des performances pour de très grands volumes de données
  • Nombreux exemples pratiques et code source complet

Que vous soyez développeur web souhaitant ajouter une dimension cartographique à vos projets, data analyst cherchant à valoriser vos données géographiques, ou simplement curieux de cartographie interactive, ce livre vous accompagnera pas à pas dans la maîtrise de Leaflet.

Couverture du livre Cartographie web avec Leaflet