Bonjour à toutes et à tous, aujourd’hui j’ai eu envie de vous partager une méthode simple et efficace de créer dynamiquement des cartes de chaleur avec FME et Python. En effet, FME ne propose pas encore de Transformer « HeatMapGenerator » et du coup, la méthode la plus simple pour générer ces cartes souvent très pertinentes est de passer par du Python. Le transformer PythonCaller étant disponible nativement dans FME, nous allons l’utiliser pour traiter des données sur les accidents routiers.

1) Installer Python, ajouter le PATH et les librairies

Pour installer une librairie Python pour FME, je vous recommande ce tutoriel en anglais mis à disposition par SAFE : Lien du Tutoriel

  • L’étape 1 consiste à installer Python sur votre poste,
  • L’étape 2 consiste à ajouter le PATH PYTHONPATH dans votre système
  • L’étape 3 consiste à télécharger et installer les librairies heatmap et Pillow dans le dossier FME

2) Données à traiter

Les données doivent être de type points pour générer des cartes de chaleur. Dans cet exemple, j’ai utilisé les données des accidents routiers disponibles sur ce site : Téléchargement données des accidents routiers

Description des données :

« Dans le cadre du programme Entrepreneur d’Intérêt Général 2017, nous avons travaillé sur les données BAAC. Les données ont été nettoyées et géocodées utilisant : les coordonnées saisies par les forces de l’ordre la base d’adresse nationale (BAN : https://adresse.data.gouv.fr/) la base d’adresse nationale ouverte (BANO : https://www.data.gouv.fr/fr/datasets/base-d-adresses-nationale-ouverte-bano/) les points de repère routier (https://github.com/eig-2017/pointk/ et https://www.data.gouv.fr/fr/datasets/bornage-du-reseau-routier-national/) De plus, nous avons pris en compte l’historique des commues (https://github.com/etalab/geohisto) ainsi que les codes postaux en cas de saisie à la place du code INSEE (https://www.data.gouv.fr/fr/datasets/base-officielle-des-codes-postaux/) »

  • Les données sont en UTF-8 avec un séparateur « ; ». Pensez à paramétrer l’encodage du csv dans les paramètres avancés du reader CSV.
  • Pour faire plus simple, je vous invite à utiliser le fichier « accidents besancon » . Le séparateur est en « , ».

3) Traitement FME

Rien de bien compliqué au niveau du script FME. J’effectue dans un premier temps un test sur l’année des accidents pour ensuite créer dynamiquement les ponctuels des lieux des accidents via la latitude et la longitude des accidents dans le Transformer VertexCreator. (anciennement 2DPointAdder). Le tout passe alors dans le PythonCaller pour générer la carte de chaleur.

4) Script Python

Voici les quelques lignes de traitement Python qui utilisent les librairies heatmap et Pillow

import fme
import fmeobjects
import heatmap

class FeatureProcessor(object):
def __init__(self):
self.hm = heatmap.Heatmap()
self.hm_points = []

def input(self,feature):
vertex = feature.getCoordinate(0)
self.hm_points.append((vertex[0], vertex[1]))

self.pyoutput(feature)

def close(self):
self.hm.heatmap(self.hm_points)

self.hm.saveKML(« test.kml »)

5) Résultat

Le script génère alors un fichier png et un kml qui permet de visualiser le résultat dans le logiciel Google Earth Pro

Loïc Guénin Randelli, expert FME & SIG indépendant, www.sitdi-france.fr