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.