Quelles habitations sont à moins de 300 m d'une ligne à haute tension ? Quelle surface de forêt chaque commune possède-t-elle ? Comment fusionner des parcelles en îlots de propriété ? Ces questions se résolvent avec une poignée d'opérations, les géotraitements : tampon, intersection, découpage, différence, union et regroupement. Ce tutoriel explique ce que fait chacune dans QGIS, comment les enchaîner et les pièges à éviter.
Où les trouver dans QGIS
- Vecteur › Outils de géotraitement : les plus courantes (Tampon, Intersection, Découper, Différence, Union, Regrouper…).
- La boîte à outils de traitement (Ctrl + Alt + T) : tous les algorithmes de QGIS, GDAL et GRASS, avec une barre de recherche. Chaque algorithme peut se lancer en mode de traitement par lot (clic droit), sur plusieurs couches d'un coup.
- L'historique des traitements garde les paramètres de chaque exécution : pratique pour refaire un calcul ou copier sa commande Python.
- Le modeleur graphique enchaîne plusieurs algorithmes en un seul, réutilisable.
Deux vérifications avant de commencer
Travaillez en système projeté. Un tampon de « 500 » sur une couche en WGS84 (EPSG:4326) fait 500 degrés : il couvre la planète. Reprojetez d'abord vos couches en Lambert 93 (EPSG:2154) ou en CC, pour que distances et surfaces soient en mètres (voir les systèmes de coordonnées).
Vérifiez aussi que les géométries sont valides : une auto-intersection fait échouer une intersection ou produit des résultats faux. L'algorithme Vérifier la validité les détecte et Réparer les géométries les corrige (voir Géométries invalides et topologie). Dans Options › Traitements, le réglage « Filtrage des entités invalides » décide si QGIS s'arrête, ignore ou traite quand même ces objets.
Le tampon
L'algorithme Tampon (native:buffer) dessine autour de chaque objet la zone située à moins d'une distance donnée : un disque autour d'un point, un couloir autour d'une ligne, un polygone élargi.
- Distance : fixe, ou lue dans un champ grâce au bouton de paramètre défini par les données (par exemple
"largeur" / 2pour une route). Une distance négative rétrécit un polygone. - Segments : nombre de segments par quart de cercle (5 par défaut). Montez à 16 ou plus pour des cercles réguliers.
- Style d'extrémité : rond, plat ou carré, pour les lignes.
- Regrouper le résultat : fusionne les tampons qui se chevauchent en une seule zone, au prix des attributs.
Le tampon répond à « à moins de X mètres » ; pour un temps de parcours (à pied, en voiture), utilisez plutôt des isochrones.
Superposer deux couches
Ces opérations combinent une couche d'entrée et une couche de superposition. Elles se distinguent par ce qu'elles gardent de chaque couche :
| Algorithme | Géométrie obtenue | Attributs |
|---|---|---|
Intersection native:intersection | Seulement les parties communes aux deux couches, découpées | Ceux des deux couches (choix des champs possible) |
Découper native:clip | La couche d'entrée, coupée par l'emprise de la superposition (« emporte-pièce ») | Seulement ceux de l'entrée |
Différence native:difference | Ce qui reste de l'entrée hors de la superposition | Ceux de l'entrée |
Union native:union | Tout, découpé selon les limites des deux couches | Ceux des deux, vides là où une couche est absente |
| Différence symétrique | Ce qui n'est que dans l'une ou l'autre | Ceux des deux |
Exemple classique : la surface de forêt par commune. Intersection entre les communes et la couche des forêts donne des morceaux de forêt qui portent le nom de leur commune ; il reste à calculer leur surface et à les additionner par commune.
Les surfaces ne se mettent pas à jour toutes seules. Un champ surface copié de la couche d'origine garde la valeur de l'objet entier, pas celle du morceau. Recalculez-la après chaque découpage avec la calculatrice de champs : $area (en m², selon l'ellipsoïde du projet) ou area($geometry) (dans le système de la couche).
Regrouper
Regrouper (native:dissolve, « dissolve » en anglais) fusionne les objets qui ont la même valeur dans un ou plusieurs champs : des communes en départements, des parcelles en îlots d'un même propriétaire, des zones de PLU par type (U, AU, A, N). Sans champ choisi, tout est fusionné en un seul objet.
- Les limites intérieures disparaissent ; un objet multiple est créé si les morceaux ne se touchent pas (depuis QGIS 3.30, une option du traitement les garde en objets séparés).
- Les autres attributs sont ceux du premier objet de chaque groupe : pour des sommes ou des moyennes, utilisez Agréger (
native:aggregate), qui regroupe et calcule en même temps, par exemplesum("population").
Enchaîner les traitements
Question : quelle surface d'espaces verts se trouve à moins de 500 m de chaque école ?
- Tampon de 500 m autour des écoles (couches en Lambert 93).
- Intersection entre les tampons et les espaces verts.
- Calculatrice de champs :
$areasur les morceaux. - Agréger par identifiant d'école, avec la somme des surfaces.
Le même enchaînement en Python, dans la console de QGIS. Les noms des paramètres s'affichent avec processing.algorithmHelp("native:buffer") :
import processing
tampons = processing.run("native:buffer", {
"INPUT": "ecoles", "DISTANCE": 500, "SEGMENTS": 16, "DISSOLVE": False, "OUTPUT": "memory:"
})["OUTPUT"]
morceaux = processing.run("native:intersection", {
"INPUT": tampons, "OVERLAY": "espaces_verts", "OUTPUT": "memory:"
})["OUTPUT"]
par_ecole = processing.run("native:aggregate", {
"INPUT": morceaux, "GROUP_BY": '"id_ecole"',
"AGGREGATES": [
{"aggregate": "first_value", "input": '"id_ecole"', "name": "id_ecole", "type": 10, "length": 0, "precision": 0},
{"aggregate": "sum", "input": "$area", "name": "surface_verte_m2", "type": 6, "length": 0, "precision": 0},
],
"OUTPUT": "TEMPORARY_OUTPUT"
})["OUTPUT"]
QgsProject.instance().addMapLayer(par_ecole)
En SQL, avec PostGIS, la même question tient en une requête : ST_Buffer, ST_Intersection, puis sum(ST_Area(…)) avec GROUP BY. Et ST_Union(geom) avec GROUP BY fait le regroupement.
Les pièges courants
- Systèmes différents : QGIS reprojette à la volée à l'affichage, mais les traitements comparent des couches qui devraient être dans le même système. Harmonisez-les avant.
- Polygones résiduels (« slivers ») : deux couches dont les limites devraient coïncider mais diffèrent de quelques centimètres donnent de minuscules polygones parasites. Filtrez-les par leur surface, ou accrochez les géométries entre elles (Accrocher les géométries à la couche).
- Couches temporaires : un résultat « couche temporaire » disparaît à la fermeture du projet. Enregistrez ce qui doit durer dans un GeoPackage.
- Gros volumes : créez un index spatial sur les couches (Créer un index spatial), ou passez à PostGIS au-delà de quelques centaines de milliers d'objets.
Démonstration
Les communes de la Métropole de Lyon et trois géotraitements calculés dans votre navigateur avec la bibliothèque Turf.js, qui reproduit les algorithmes de QGIS.
À essayer : en mode « Tampon et intersection », cliquez une commune puis faites varier la distance : la liste donne la surface du tampon tombée dans chaque commune voisine. Passez en mode « Regrouper » et comparez le regroupement par classe de densité avec la fusion complète en un seul objet, la Métropole.
Licences : textes et schémas sous licence CC BY-SA 4.0 (réutilisation libre en citant CartoForge et en partageant à l'identique) ; extraits de code sous licence MIT, à copier librement dans vos projets.
Liens, services et noms de couches vérifiés le 15/10/2026. Un lien cassé ? Signalez-le.