mardi 13 octobre 2015

Construire des hostspots à partir de points localisés

Un hotspot (point chaud en français) désigne en cartographie une zone de concentration d’un phénomène social, économique, biologique ou physique.

En géomarketing, on s’intéresse par exemple aux hotspots de population : blocs d’immeubles ou quartier d’habitat très dense et vertical. On identifie aussi les hotspots de richesse (zones de concentration de hauts revenus résidentiels) ou encore les hotspots d’attraction commerciale : limite de zones commerciales drainant des flux liés à une forte densité de points de vente, etc.

Techniquement une carte de hotspots est une couche de polygones : chacun délimite les frontières d’un hotspot et les polygones ont un attribut qui hiérarchise l’importance de la zone au regard du phénomène étudié. Lors de la restitution, il est souhaitable de coupler une couche de hotspots avec une couche carte de chaleur (heatmap), calculée sur la même base.

Après beaucoup d’errances sur ce sujet, je pense que j’ai validé une méthode empirique acceptable pour la mise au point d’une carte de hotspots à partir de fichier de points localisés. Si les points sont correctement placés, la méthode dessine des contours de concentrations réels qui s’affranchissent des zonages administratifs. Elle fonctionne aussi très bien sur les bases de points volumineuses. Ce tutoriel en quatre temps est destiné aux praticiens des données géo localisées familiers des systèmes d’information géographique.


1/ Le fichier de points : la localisation des photos du site Panoramio

Considérons l’exemple de l’identification des zones à forte fréquentation touristique en France métropolitaine. Notre beau pays regorge de zones d’intérêt touristique et il n’existe pas de recensement, carte exhaustive de ces zones. Je vous propose de la créer.

Pour cela, je dispose d’un fichier de plus de deux millions de points : chaque point correspond aux coordonnées géographiques d’une prise de vue photographique publiée sur Google Map (via Panoramio). Les photos sont prises par de nombreux contributeurs touristes et Panoramio fait un contrôle pour valider que la photo est pertinente pour décrire un lieu. Les photos sont prises avec des appareils obligatoirement équipés d’un système GPS. La localisation chargée sur Google/Panoramio est donc très précise (< 5 mètres). Une API de Google/Panoramio permet d’extraire les coordonnées géographiques de chaque photo sur tout ou partie de la planète. Le fichier que j’exploite couvre la France métropolitaine et toutes ses zones frontalières. Merci aux données massives (« bigdata ») : nous disposons ainsi d’une source libre de grande qualité pour établir une carte des hotspots de fréquentation touristique.



La localisation à Paris des photos chargées sous Panoramio, reflet brut des zones touristiques
Chaque point bleu = coordonnée GPS d’une photographie

Je surligne à la main en rouge les hotspots bien connus. On distingue au Sud-Ouest le château de Versailles, la zone de La Défense (la Grande Arche attire des travailleurs et aussi beaucoup de touristes), Montmartre, la Tour Eiffel, les Champs-Elysées, tout le centre de Paris et la Seine avec le trajet des bateaux Mouches. Au Nord, la Cité des Sciences et plus à l’Est, le cimetière du Père-Lachaise, qui accueille plus de 3 millions de visiteurs par an, soit le cimetière le plus visité au monde. En zoomant un peu plus sur ce cimetière, on trouve des concentrations inédites de photos sur la tombe de Jim Morrison.

La localisation des photos prises au cimetière du Père-Lachaise (Paris 20°)



Cette source est donc vraiment précise pour bien situer les lieux de fréquentation. Le parisien peut surligner à la main les hotspots, mais on conviendra que c’est arbitraire et fastidieux à généraliser sur un grand territoire !


2/ « rastérisation » des points avec une carte de chaleur

Passons donc à notre deuxième point, la génération d’une carte de chaleur à partir des points photos. Il s’agit d’une grille raster carroyée pour laquelle on attribue à chaque pixel (carreau) une valeur de mesure correspondant à la densité de points photos dans et autour du carreau. Pour une photo donnée de valeur 1, nous distribuons cette valeur sur tous les carreaux avoisinants dans la limite d’un rayon fixé et à raison inverse quartique de la distance du point au carreau. Ce calcul est fait pour les 2 millions de points et il faut utiliser une bonne technologie. QGIS (version 2.10) fait très bien le travail. Ce logiciel est libre et il possède de très riches et bons algorithmes pour générer des cartes de chaleurs et traiter les couches rasters. Voici le lien de téléchargement de QGIS.

Après chargement de notre couche vectorielle de 2 millions de points photos, générons une grille de chaleur raster (menu QGIS Raster + Carte de chaleur) : fixons d’abord un rayon de calcul de 200 m (un rayon trop étroit fait planter le soft). QGIS propose alors par défaut une grille à carreaux trop macro ; il faut re-calibrer la dimension de la grille. Si le système de projection est métrique, le redimensionnement est fait en mètres. Mes données sont en projection long/lat EPSG 4326, je dimensionne mes carreaux en degré. Ici je demande la création d’une grille raster format GeoTIFF de 10 551*16 880 carreaux, soient près de 180 millions de pixels avec un écartement de 0.001 degré de longitude et de latitude (soient en France des carreaux de 80m de large et 160m de haut).


Le choix du rayon et de la taille des carreaux dépend du problème que l’on traite. Il faut choisir un rayon court pour des mesures avec impact fort de proximité ou si les frontières de hotspots sont très tranchées. Si le nombre et la densité de points est faible ou si l’on veut une vision macro de la mesure, il faut élargir le rayon et la taille des carreaux de la grille. La taille du rayon doit aussi être compatible, supérieure aux côtés du carreau de la grille.

Notez que vous pouvez intégrer des paramètres complémentaires pour la définition de la carte de chaleur : pondération des points par un indice d’attractivité ou de taille, ou encore variation du rayon de calcul selon la nature de vos points.

QGIS mouline seulement quelques minutes pour ce calcul. Par défaut, le style de la grille résultat s’affiche en noir et blanc



En allant dans les propriétés de la couche, je définis un style d’affichage plus explicite pour cette couche raster. Il y a quelques paramètres à changer : choisir un rendu avec pseudo-couleur, choisir sa palette, puis recalculer les valeurs réelles minimum et maximum de la grille, n’oubliez pas ensuite de classer en mode continu les tranches de la palette de couleur, puis ajuster le nombre de classes et manuellement les tranches. Ici, je ne voulais pas que des photos trop isolées apparaissent dans le rendu de ma carte de chaleur, j’ai donc relevé le minimum de la valeur affichable de la grille.



On obtient une couche de chaleur et l’on vérifie qu’elle cale bien avec la densité de points :





3/ Création de courbes de niveaux à partir de la grille raster

Attention : le rayon de 200 m est bien calé pour le rendu visuel de l’attraction. En revanche, il est trop court pour le calcul des hotspots. En effet, l’identification des courbes de niveaux s’appuie sur la grille et ne fonctionne pas dans ses trous. Une courbe de niveau relie les carreaux de même mesure. Si la grille est trop resserrée autour des points photos, une courbe de plus bas niveau risque de ne pas se refermer sur elle-même du fait de carreaux manquants. Pour cette raison, j’ai généré une deuxième grille similaire hormis le rayon que j’ai étendu à 500 mètres. Cette grille très (trop) lissée est exploitable uniquement pour la définition des courbes de niveau.



Pour calculer les courbes de niveaux sur QGIS, rendez-vous sur le panel Raster+Extraction+Création de contours. Il faut préciser le nom de la grille raster en entrée, le nom du répertoire d’accueil du fichier vectoriel des contours en sortie, la variable attribut (ici TourismS) qui accueille le seuil de définition de chaque courbe de niveau.

Par défaut, QGIS propose la création d’une série de courbes de niveaux basées sur la mesure de la grille par pas de 10 entre les valeurs minimum et maximum de la grille. Notre grille de photo a une très forte variabilité de mesure. Ce n’est pas adapté. L’outil pré-génère une commande Gdal (outil libre de commandes SIG très puissant que QGIS exploite abondamment). Rentrons en édition sur cette commande et modifions le paramètre de définition des intervalles « –i 10.0 » en le remplaçant par une définition d’intervalles fixes « -fl 10 50 200 500 1000 ». J’ai un peu tâtonné en regardant la distribution de la mesure de la grille pour fixer ces seuils de 5 courbes de niveau de fréquentation touristique. Je souhaitais définir 5 seuils « d’étoilage » des niveaux de fréquentation et respecter la variance de la fréquentation. J’ai appliqué une recette bien parisienne ; j’ai calé mes seuils sur la région parisienne avec ses hotspots touristiques très importants et j’ai vérifié que cela collait bien pour le reste du pays. D’autres démarches sont certainement plus convaincantes…


J’ai donc demandé à QGIS de lancer la commande :
gdal_contour -a TourismS -fl 10 50 200 500 1000 10.0 "E:/0. PAUL RECUP/1. data/PhotosPanoramio/FR_HotSpot_Photos.tif" "E:/0. PAUL RECUP/0. PaulTemporaire/1. Dev/Tourisme/Fréquentation/FR_HotSpot_Contours"

J’obtiens 5 courbes de niveau et je leur applique un style catégorisé.


4/ « Polygonisation » des courbes de niveaux

Nous y sommes presque. Les courbes de niveaux qui délimitent les hotspots sont des objets lignes. Or, les requêtes cartographiques les plus courantes (inclusion, proximité…) fonctionnent avec des polygones. Avec QGIS, on « polygonise » donc la couche vecteurs de lignes de niveaux en allant sur Vecteur + Outil de géométrie + Lignes vers polygones. A l’affichage, la couche stylée et polygonisée est la même que celle des contours lignes, mais chaque Hotspot est désormais un objet polygone. Notons qu’un polygone de niveau inférieur englobe la surface de tous les polygones hotspots de niveaux plus élevés.



En fin de course, une série de traitement de vérifications et de nettoyage des géométries des polygones hotspots peut être nécessaire. Paris, par exemple est enserrée d’un très large hotspot de bas niveau (mesure = 10) qui couvre quasiment toute la ville. Il est vrai que la ville de Paris est une grande promenade touristique. Mais on peut aussi considérer des seuils relatifs plus élevés pour la définition des hotspots urbains et supprimer les hotspots de bas niveau qui couvrent un territoire trop vaste. A chacun de valider la bonne cohérence de sa nouvelle couche.


Voilà, c’est fait. Nous avons nos hotspots de fréquentation touristique avec une grille conjointe de compréhension de la géographie de l’intensité de la mesure. Il ne reste plus qu’à publier cela sur le net, mais c’est une autre histoire (pas forcément toujours simple) et que je ne vais pas développer ici.
Je vous remercie de m’avoir suivi jusqu’ici, j’espère que vous êtes équipé pour adapter cette méthode empirique à votre jeu de données points. Bonne session « hotspots ».