SIG & Carto Guide

ETL géospatial : pourquoi préparer ses données avant QGIS change tout

Ce que vous faites à la main chaque semaine dans QGIS s'appelle de l'ETL. Et ça s'automatise.

Mattieu Pottier 10 min de lecture
Pipeline ETL géospatial — préparation de données avant QGIS avec ogr2ogr et Python

Vous téléchargez un fichier IGN, vous l'ouvrez dans QGIS, et avant même de commencer à travailler, vous passez une heure à renommer des colonnes, harmoniser des valeurs, faire une jointure avec un fichier INSEE et filtrer les entités qui vous intéressent.

La semaine suivante, vous recommencez.

Ce travail invisible a un nom : la transformation de données. C'est la couche "T" de l'ETL. Et il existe des outils faits pour ça — qui ne sont pas QGIS.

Introduction — Ce que vous faites avant d'ouvrir QGIS

Un géomaticien d'une communauté d'agglomération de l'ouest de la France m'a décrit sa routine du lundi matin. Chaque semaine, il reçoit un export de la base adresse nationale mis à jour. Avant de pouvoir l'utiliser dans son SIG, il effectue les mêmes opérations :

  • renommer les colonnes selon la convention interne
  • passer les noms de voie en minuscules
  • supprimer les accents pour compatibilité avec le système de l'agglomération
  • supprimer les 34 colonnes inutiles sur 38
  • filtrer les adresses de son périmètre
  • faire une jointure avec le fichier des IRIS pour enrichir les attributs

Temps moyen : entre 45 minutes et une heure. Chaque lundi.

Ce n'est pas un cas isolé. C'est la routine de la majorité des géomaticiens qui travaillent avec des données externes — IGN, data.gouv.fr, prestataires, autres services. La donnée brute n'arrive jamais dans le bon format, avec les bonnes colonnes, dans le bon périmètre. Elle se prépare. Et cette préparation se fait souvent dans QGIS, parce que c'est l'outil sous la main — pas parce que c'est le bon outil pour ça.

Cet article s'adresse aux géomaticiens et chargés SIG qui reconnaissent cette routine. L'objectif est simple : nommer ce travail, comprendre pourquoi QGIS n'est pas le bon endroit pour le faire, et découvrir ce qui existe à la place.

La donnée brute n'est jamais prête

Ce que vous faites vraiment avant d'ouvrir QGIS

Faisons l'inventaire honnête. Avant de commencer à analyser, à cartographier, à produire quoi que ce soit, la plupart des projets SIG impliquent une ou plusieurs de ces opérations :

Normalisation des colonnes : renommer NOM_COMMUNE en nom, CODE_INSEE en code_insee, supprimer les espaces dans les noms de champs, harmoniser les majuscules et les minuscules. Les fichiers IGN, les exports d'ERP, les données de prestataires — chacun a ses conventions. Votre projet en a une autre.

Nettoyage des valeurs : passer PARIS en Paris, supprimer les accents pour les systèmes qui ne les supportent pas (Île-de-FranceIle-de-France), corriger les encodages (ISO-8859-1 reçu, UTF-8 attendu), formater les codes INSEE sur 5 caractères avec zéro padding (75056 correct, 7556 invalide sans padding).

Filtrage des entités : garder uniquement les communes d'un département, les bâtiments d'une certaine catégorie, les parcelles d'une commune précise. Un fichier BD TOPO national quand vous travaillez sur une intercommunalité de 12 communes, c'est 99 % de données inutiles à charger.

Sélection des colonnes : un fichier IGN livré avec 47 colonnes dont 4 vous sont utiles. Les 43 autres alourdissent le fichier, ralentissent le chargement, et encombrent la table attributaire.

Jointures attributaires : enrichir une couche géométrique avec des attributs d'un fichier CSV ou d'une autre table. Communes + population INSEE. Parcelles + données foncières. Bâtiments + données énergie.

Vérification des géométries : les données téléchargées contiennent parfois des géométries invalides. Les charger telles quelles dans une analyse spatiale ou dans PostGIS produit des erreurs silencieuses dont le diagnostic est douloureux.

Prise individuellement, chaque opération semble anodine. C'est leur répétition — sur les mêmes sources, selon les mêmes règles, chaque semaine ou chaque mois — qui révèle le problème de fond.

Les actions répétées que personne ne nomme

Ce travail s'appelle de la transformation de données. C'est précisément la couche "T" de l'ETL — Extract, Transform, Load. La plupart des géomaticiens le font dans QGIS parce que c'est l'outil qu'ils ont sous la main. Mais QGIS a été conçu pour visualiser et analyser des données géographiques — pas pour les transformer.

Utiliser QGIS pour préparer ses données, c'est un peu comme utiliser un logiciel de cartographie pour rédiger un compte rendu de réunion. Ça marche techniquement — QGIS peut tout à fait renommer des colonnes et faire des jointures. Mais ce n'est pas ce pour quoi l'outil est optimisé, et ça se voit dans l'expérience quotidienne.

💡
À noter

L'ETL géospatial n'est pas une discipline réservée aux data engineers. C'est la formalisation d'un travail que les géomaticiens font déjà — avec les bons outils à la place de QGIS pour la partie transformation.

QGIS n'est pas un outil de transformation — c'est un outil d'analyse

Le problème des couches temporaires

Chaque opération de transformation dans QGIS produit par défaut une couche temporaire en mémoire. Sélection par attribut : couche temporaire. Jointure attributaire : couche temporaire. Calculateur de champ : couche temporaire. Filtre géométrique : couche temporaire.

Ces couches n'existent que pendant la session QGIS en cours. Elles disparaissent à la fermeture sans "Enregistrer sous". Un pipeline de transformation de 5 étapes dans QGIS, c'est donc 5 "Enregistrer sous" successifs, 5 fichiers intermédiaires à nommer selon une convention ad hoc, à stocker quelque part, et à retrouver la prochaine fois.

⚠️
Point d'attention

Une couche temporaire non sauvegardée avant une fermeture inattendue de QGIS — plantage, coupure de courant — est du travail perdu. Sans exception.

La conséquence pratique : les géomaticiens développent des habitudes défensives. On sauvegarde très souvent, au moindre doute. On accumule des fichiers intermédiaires communes_v1.gpkg, communes_v2_filtre.gpkg, communes_v2_filtre_jointure.gpkg. Le dossier de travail devient illisible en quelques semaines.

Le projet QGIS comme brouillon permanent

La couche temporaire est le symptôme visible. Le problème plus profond est la confusion entre deux espaces de travail distincts : l'espace de préparation des données et l'espace d'analyse et de cartographie.

Dans QGIS, les deux coexistent dans le même panneau de couches. Les couches qui sont des états intermédiaires de transformation se mélangent aux couches qui sont des données de travail définitives. On ne sait plus quelle couche est "la bonne version". On hésite à en supprimer une de peur qu'elle soit encore utile. Le projet QGIS ressemble à un brouillon plutôt qu'à un espace de travail organisé.

Ce n'est pas un problème d'organisation personnelle — c'est la conséquence structurelle d'utiliser le mauvais outil pour la transformation.

La séparation des responsabilités

À retenir

QGIS = visualisation et analyse spatiale. ETL = préparation et transformation de la donnée. Ce sont deux responsabilités distinctes qui méritent deux outils distincts.

Quand on sépare ces deux responsabilités, QGIS retrouve son rôle naturel : un outil de cartographie et d'analyse puissant, alimenté par des données déjà propres. Le projet QGIS ne contient que des données de travail. Plus de couches temporaires d'états intermédiaires, plus de fichiers _v2_final_definitif.gpkg.

Ce qu'un pipeline ETL fait à votre place

Un pipeline ETL géospatial, c'est une séquence d'opérations définie une fois, rejouable à volonté. Il prend la donnée brute en entrée et livre la donnée propre en sortie — sans interaction humaine, sans couches temporaires, sans "Enregistrer sous" intermédiaire. Voici les cinq opérations les plus courantes.

Standardisation : colonnes, casse, accents, types

Un fichier de la BD TOPO IGN arrive avec des noms de colonnes en majuscules, des valeurs texte avec accents, un champ surface stocké comme chaîne de caractères alors qu'il devrait être un nombre flottant. Toutes ces transformations sont triviales à coder une fois et à rejouer automatiquement.

Python
import geopandas as gpd
import unicodedata

# Charger le fichier source
gdf = gpd.read_file("batiments_bdtopo.gpkg")

# Normaliser les noms de colonnes
gdf.columns = (
    gdf.columns
    .str.lower()
    .str.replace(" ", "_")
)

# Supprimer les accents dans les valeurs texte
def supprimer_accents(texte):
    if not isinstance(texte, str):
        return texte
    return unicodedata.normalize("NFD", texte).encode("ascii", "ignore").decode("utf-8")

gdf["nom"] = gdf["nom"].apply(supprimer_accents)

# Convertir le champ surface en float
gdf["surface"] = gdf["surface"].astype(float)

# Garder uniquement les colonnes utiles
gdf = gdf[["nom", "surface", "usage", "geometry"]]

# Exporter le résultat propre
gdf.to_file("batiments_propres.gpkg", driver="GPKG")

Ce script tourne en quelques secondes. La semaine prochaine, quand le fichier est mis à jour, il tourne à nouveau — sans intervention humaine.

Jointures automatiques entre sources

Cas concret : une couche géométrique des communes (fichier GeoPackage) doit être enrichie avec les données de population du fichier INSEE (CSV). Dans QGIS : jointure manuelle, couche temporaire, Enregistrer sous. Dans un pipeline Python ou avec ogr2ogr : une opération, un fichier propre en sortie.

La jointure est codée une fois selon les règles métier — clé de jointure, gestion des valeurs nulles, colonnes à conserver. Elle est rejouée automatiquement à chaque nouvelle livraison des données sources, que ce soit la mise à jour annuelle des données INSEE ou une livraison hebdomadaire d'un prestataire.

Filtrage et sélection des champs utiles

Un fichier BD TOPO national fait plusieurs gigaoctets. Pour un projet sur une intercommunalité de 15 communes, 99 % de ces données sont inutiles. Un pipeline ETL filtre les entités et sélectionne les colonnes utiles avant même que QGIS ne soit impliqué. La géométrie est conservée automatiquement — seuls les champs attributaires sont à lister.

Bash
# Filtrer les bâtiments d'un département et garder 3 colonnes sur 47
ogr2ogr \
  -f GPKG batiments_973.gpkg \
  batiments_france.gpkg \
  -where "CODE_DEP = '973'" \
  -select "NOM,SURFACE,USAGE"

Le fichier livré à QGIS est 50 fois plus léger. Il se charge en secondes. La table attributaire est lisible.

💡
À noter

Livrer à QGIS uniquement les données dont il a besoin améliore significativement les performances de chargement et la fluidité du projet, en particulier sur des postes peu puissants ou des connexions réseau lentes.

Vérification et correction des géométries invalides

Les données téléchargées contiennent parfois des géométries invalides : auto-intersections, anneaux non fermés, géométries nulles. Les charger directement dans PostGIS ou les utiliser dans une analyse d'intersection produit des erreurs silencieuses — des résultats faux sans message d'erreur explicite.

Un pipeline ETL géospatial inclut une étape de validation et de correction avant chargement. En Python avec GeoPandas, buffer(0) corrige la plupart des géométries invalides en une ligne. En QGIS Processing via qgis_process, l'algorithme native:fixgeometries fait le même travail en mode batch.

⚠️
Point d'attention

Une géométrie invalide dans une analyse d'intersection ou de jointure spatiale produit un résultat incorrect sans avertissement. La validation systématique en amont du pipeline évite des heures de débogage.

Un seul fichier en sortie — propre, nommé, dans le bon format

Le résultat du pipeline est un fichier unique : nommé selon la convention interne, dans le bon CRS, avec uniquement les colonnes utiles, les géométries validées, les attributs normalisés. QGIS l'ouvre directement. Pas de nettoyage, pas de couche temporaire, pas de "Enregistrer sous". Le projet QGIS ne contient que des données de travail.

À retenir

Un pipeline ETL géospatial ne produit pas des états intermédiaires — il produit un livrable. La distinction est fondamentale : on ne travaille plus dans le pipeline, on travaille avec son résultat.

Les outils adaptés au géomaticien

Trois niveaux d'entrée selon les compétences disponibles. Pas besoin de tout maîtriser — choisir l'outil le plus simple qui couvre le besoin.

1

ogr2ogr — le couteau suisse CLI

  • Conversion de formats, reprojection, filtrage attributaire, sélection de colonnes
  • Sans Python ni installation supplémentaire si QGIS est déjà installé (GDAL inclus)
  • Scriptable dans un .bat (Windows) ou .sh (Linux/macOS)
  • Courbe d'apprentissage courte pour qui est à l'aise avec un terminal
2

QGIS Processing + qgis_process

  • Pipeline visuel via le Graphical Modeler, sans écrire de code
  • Exécutable via qgis_process en ligne de commande et automatisable avec un planificateur
  • Accès aux 400+ algorithmes QGIS, interface familière
  • Limite : dépendance à l'installation QGIS sur la machine d'exécution
3

Python + GeoPandas

  • Pour les jointures multi-sources et les règles de nettoyage métier complexes
  • Script rejouable, versionnable avec Git, intégrable dans un planificateur de tâches
  • GeoPandas + pandas couvrent 90 % des cas
  • 50 lignes de Python suffisent souvent pour transformer un fichier hebdomadaire

Pour aller plus loin sur ces outils et les architectures de pipelines associées, le livre blanc ETL 2026 couvre l'ensemble de l'écosystème, du script Python aux plateformes comme FME, avec un guide décisionnel par profil et volumétrie.

Quand automatiser — et quand ne pas le faire

Automatiser un pipeline ETL géospatial a un coût initial : écrire le script ou construire le modèle, le tester, le maintenir quand les sources changent. Ce coût n'est justifié que si la transformation est répétée régulièrement.

01

La même transformation revient-elle régulièrement ?

Plus d'une fois par mois sur la même source → le temps d'automatisation est rentabilisé rapidement. Ponctuel, source unique → QGIS reste tout à fait valide.

02

La source est-elle mise à jour régulièrement ?

IGN, BAN, INSEE : mises à jour périodiques. Un pipeline automatique est bien plus fiable qu'une manipulation manuelle répétée et élimine le risque d'oublier une étape.

03

Les données alimentent-elles une infrastructure critique ?

Tableau de bord, application web mapping, base PostGIS partagée → la reproductibilité et la traçabilité du pipeline justifient l'investissement dans l'automatisation.

04

Avez-vous les compétences pour maintenir le pipeline ?

Choisir l'outil en fonction des compétences disponibles dans l'équipe, pas de la sophistication technique. Un pipeline que personne ne sait maintenir est un risque.

La règle est simple : si vous effectuez la même transformation plus d'une fois sur la même source, automatisez. Sinon, QGIS reste un outil parfaitement valide pour les manipulations ponctuelles.

Ce qu'il faut retenir

Le travail de préparation des données géospatiales — renommer les colonnes, harmoniser les valeurs, faire les jointures, filtrer par périmètre — est un travail de transformation. C'est de l'ETL. Il a sa place dans un pipeline dédié, pas dans QGIS.

Séparer la transformation de l'analyse a un effet concret et immédiat : le projet QGIS devient plus propre, plus rapide, plus lisible. Les couches temporaires et les "Enregistrer sous" intermédiaires disparaissent. QGIS redevient ce qu'il est : un outil d'analyse et de cartographie alimenté par des données déjà prêtes.

Les outils existent — ogr2ogr, QGIS Processing + qgis_process, Python + GeoPandas — et ils sont accessibles sans être data engineer. Le premier pipeline ETL géospatial peut être opérationnel en une demi-journée pour un géomaticien à l'aise avec un terminal.

📥

Livre Blanc MP-i — ETL en 2026 : comprendre, choisir et mettre en œuvre

Patterns, outils et architectures — du script Python au data stack cloud-native, avec un focus sur l'ETL géospatial. Téléchargement gratuit.

↓ Télécharger le PDF