Makina Blog

Le blog Makina-corpus

Créer une heatmap de données raster avec Leaflet


Comment nous avons analysé des images côté client en canvas pour produire une heatmap avec Leaflet

Dans le cadre d'un projet, nous avons du créer une carte de sensibilité du milieu à partir de différents critères paramétrables par l'utilisateur. Plusieurs contraintes nous ont amenés à faire les choix techniques qui seront expliqués par la suite :

  • Les données géographiques prises en compte dans la carte de sensibilité peuvent être nombreuses : jusqu'à une trentaine de couches.
  • Certaines couches de données ont un poids important (plusieurs dizaines de Mo)
  • Les données géographiques pouvant être choisies ont des types de géométrie différents (points, lignes et polygones), alors qu'une heatmap utilise un nuage de points.

Démarche générale

Étant donné le nombre et le poids important des couches de données géographiques à prendre en compte, il n'était pas raisonnable de réaliser toutes les opérations côté client. Nous avons donc choisi de générer sur le serveur des images en noir et transparent de chaque couche de données à prendre en compte, puis de les analyser dans le navigateur pour produire la heatmap.

Servir les données

Nous avons choisi d'utiliser MapServer, simple à mettre en œuvre et flexible pour ajouter ou modifier des couches dans le futur. Il nous permet notamment d'accéder en WMS à des images non tuilées (qui seront plus simples à analyser dans le navigateur).

Chaque couche peut être servie par MapServer, pour les coordonnées désirées et dans un style noir et transparent. Les points et les lignes ont une largeur de 5 pixels, ce qui permettra de n'analyser qu'un pixel sur 25 pour générer la heatmap, tout en étant sûr de ne pas passer à côté d'un objet.

Afficher la carte de sensibilité

Pour chaque couche choisie par l'utilisateur, on demande à MapServer l'image correspondante dans les dimensions de la carte affichée à l'écran. Cette image est ajoutée à un canvas de la taille de la carte. On parcourt cette image dans la largeur et la hauteur tous les 5 pixels :

for (var j = 0; j < canvas.width; j + =5) {
    for (var k = 0; k < canvas.height; k += 5) {
        var pos = (k * canvas.width + j) * 4 + 3;
        var data = imageData[pos];
        if (data > 0) {
            var newcoords = map.unproject(L.point(j + offsetX, k + offsetY), map.getZoom());
            dataHeat.push([newcoords.lat, newcoords.lng, weight]);
        }
    };
};

Si on trouve un pixel noir, alors on convertit les coordonnées en pixels vers des coordonnées en latitude/longitude grâce à la méthode unproject de Leaflet. Les paramètres offsetX et offsetY sont calculées à partir de la position de l'origine de la carte et de la position relative du calque par rapport à la carte. On ajoute alors ces coordonnées ainsi que le poids choisi par l'utilisateur dans un tableau.

On utilise alors le plugin Leaflet.heat pour afficher nos différents points et leurs poids associés. Les poids des points situés aux mêmes coordonnées (issus des différentes couches) sont alors additionnés.

Actualités en lien

De la donnée OpenS­treet­Map aux appli­ca­tions métier : comment Makina Corpus accom­pagne les orga­ni­sa­tions

30/07/2026

OpenS­treet­Map est souvent présenté comme une alter­na­tive libre aux cartes proprié­taires. Pour­tant, sa véri­table richesse ne se limite pas à la carte. C’est un commun numé­rique qui rassemble une commu­nauté mondiale de contri­bu­trices et contri­bu­teurs autour d’une même ambi­tion : produire et main­te­nir une base de données géogra­phiques libre­ment réuti­li­sable. Depuis de nombreuses années, Makina Corpus parti­cipe à cet écosys­tème, convain­cue que les communs numé­riques consti­tuent un levier d’in­no­va­tion, de coopé­ra­tion et de souve­rai­neté.  
Voir l'article
Image

Geotrek 2025–2026 : nouvelles fonc­tion­na­li­tés et grands chan­tiers à venir

27/05/2026

Les années 2025 et 2026 ont été parti­cu­liè­re­ment riches en évolu­tions pour l’éco­sys­tème Geotrek. De nombreuses fonc­tion­na­li­tés ont été déve­lop­pées afin d’amé­lio­rer les perfor­mances, faci­li­ter l’ad­mi­nis­tra­tion des données et enri­chir les usages carto­gra­phiques. Cet article propose un tour d’ho­ri­zon des prin­ci­pales évolu­tions déployées ces deux dernières années sur Geotrek-admin, Geotrek-mobile et Geotrek-widget, avant d’ou­vrir sur plusieurs grands chan­tiers actuel­le­ment en prépa­ra­tion pour les prochaines versions de Geotrek.
Voir l'article
Image
Geotrek-admin

Geotrek et OpenS­treet­Map : Mise en place d’une passe­relle pour une connais­sance du terri­toire enri­chie

08/09/2025

Dans l’uni­vers des logi­ciels open-source, les plus belles inno­va­tions naissent souvent de la rencontre entre des commu­nau­tés qui partagent les mêmes valeurs. Aujour­d’hui, nous célé­brons une avan­cée majeure pour Geotrek : la créa­tion d’une passe­relle avec OpenS­treet­Map (OSM), la plus grande base de données carto­gra­phique colla­bo­ra­tive au monde. Plus qu’une simple fonc­tion­na­lité, ce projet est le fruit d’un travail d’in­gé­nie­rie et de recherche appro­fondi.
Voir l'article
Image
Logo d'illustration pour la passerelle entre OSM et Geotrek

Inscription à la newsletter

Nous vous avons convaincus