Heatmap avec QGIS, GDAL et Leaflet

samedi 24 août 2013

Ce billet présente une méthode pour générer une carte de chaleur (ou heatmap) à l’aide de QGIS et GDAL afin de l’afficher sur le web avec Leaflet.

Générer la heatmap dans QGIS

Commencez par récupérer le shapefile des débits de boisson du Finistère sur GéoBretagne. Dans QGIS, sélectionnez le fichier téléchargé depuis le menu Couche > Ajouter une couche vecteur.

Activez le plugin Carte de chaleur depuis le menu Extension > Gestionnaire d’extensions.

Lancez la génération de votre heatmap depuis le menu Raster > Carte de chaleur. Entrez heatmap.tif comme nom de fichier de sortie, puis personnalisez les champs suivant :

  • Rayon : 1000 mètres est une bonne valeur pour l’étendue des données utilisées dans cet exemple.
  • Ratio de corruption : 0
  • Avancé > Taille en Y : 100

Comme indiqué dans la documentation du plugin heatmap :

Le résultat après chargement de la carte de chaleur n’est probablement pas le résultat auquel on peut s’attendre. La surface est uniformément grise et ne montre aucune variation. Il est nécessaire de modifier l’apparence de cette couche afin de distinguer la carte de chaleur.

Depuis la liste des couches à gauche de l’écran, affichez les Propriétés de votre couche heatmap. Dans l’onglet Style, changez la Palette de couleur de ‘Dégradé de gris’ à ‘Pseudo-Couleurs’. Puis, dans l’onglet Transparence fixez la Tranparence globale à 20%. Cliquez sur Appliquer puis OK pour observer le résultat.

Pour rendre les zones de valeur nulles transparentes, retournez dans la fenêtre de Propriétés de la couche heatmap, dans l’onglet Transparence cliquez sur le bouton Ajouter les valeurs manuellement et entrez la valeur 0 dans la colonne Gris de la nouvelle ligne ajoutée.

Voici un aperçu de ce que vous devez obtenir à cette étape :

Afin de pouvoir utilisez notre heatmap dans une carte Leaflet, nous allons exporter celle-ci en en WGS84 (code EPSG:3857). Depuis le menu Raster > Projections > Projection, entrez heatpmap_merc.tif comme nom de fichier de sortie, puis personnalisez les champs suivant :

  • SCR source : EPSG:2154 (qui est celui utilisé par le shapefile de GéoBretagne)
  • SCR cible : EPSG:3857
  • Méthode d’échantillonnage : Lanczos
  • Pas de données : 0

Et voilà votre heatmap est générée au format GeoTIFF et son système de coordonnées est bien renseigné. Reste un problème, voici ce que vous observez en ouvrant votre fichier heatmap_merc.tif... un belle image complètement transparente :p

Colorer le GeoTIFF avec GDAL

Pour colorer notre GeoTIFF, utilisons la commande gdaldem de GDAL.

Avant tout, il vous faut définir la palette de couleurs que vous souhaitez appliquer à votre heatmap. Pour cela, créez un fichier colors.txt et collez-y le contenu suivant :

nv        0        0        0        0
0        0        0        255        0
2.17659        0        255        255
4.35519        255        255        0
6.52978        255        0        0

Voici la description du contenu de ce fichier d’après la documentation de GDAL :

Le fichier de configuration des couleurs au format texte contient généralement 4 colonnes par ligne : la valeur de l’élévation et les composants correspondants de Rouge, Vert, Bleu (entre 0 et 255). La valeur d’élévation peut être une valeur en virgule flottante, ou le mot-clé nv pour la valeur nodata. L’élévation peut aussi être exprimée en pourcentage : 0 % étant la valeur minimale trouvé dans le raster, 100 % la valeur maximale.

Une colonne supplémentaire peut être ajouté optionnellement pour le composant alpha. S’il n’est pas définie, l’opacité complète (255) est supposée.

Depuis un terminal, lancez la commande suivante :

gdaldem color-relief -alpha -co ALPHA=YES heatmap_merc.tif colors.txt heatmap_merc_colors.tif

Pour information, l’option -alpha -co ALPHA=YES permet de générer un tiff transparent. Notre heatmap est maintenant colorée, voici un aperçu du fichier heatmap_merc_colors.tif :

Générer les tuiles avec GDAL

Pour afficher notre heatmap dans une carte Leaflet, il faut convertir notre fichier GeoTIFF en tuiles. Pour cela nous utilisons l’utilitaire gdal2tiles de GDAL.

Lancez la commande suivante depuis votre terminal :

gdal2tiles.py -s EPSG:3857 -z "7-11" heatmap_merc_colors.tif tiles

Détail des options :

  • -s EPSG:3857 permet de définir le système de coordonnées utilisé
  • -z "7-11" permet de défnir le zoom mini et maxi des tuiles à générer
  • heatmap_merc_colors.tif est le nom du fichier source
  • tiles est le nom du répertoire dans lequel les tuiles seront générées

Pour information, il est possible de convertir les tuiles générées au format MBTiles à l’aide de l’utilitaire MBUtil. [1]

Créez un fichier metada.json à la racine du répertoire tiles et collez-y le contenu suivant :

{
        "name": "bars",
        "description": "",
        "format": "png",
        "minzoom": "7",
        "maxzoom": "11",
        "version": "1.0",
        "type": "baselayer"
}

Puis, lancez la commande suivante depuis votre terminal pour générer le fichier mbtiles :

mb-util --import tiles/ heatmap.mbtiles

Voici une page de démonstration qui affiche la heatmap et une couche GeoJSON listant le nombre de total de débits de boisson par communes.

Répondre à cet article

Qui êtes-vous ?
Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.