Jointure spatiale QGIS : par localisation, proximité ou IA
Publié le

Une jointure spatiale copie les champs d'une couche vers une autre en fonction de la position des entités, et non d'un identifiant commun. Dans QGIS, ouvrez Vector > Data Management Tools > Join Attributes by Location… (Joindre les attributs par localisation), choisissez la couche qui doit recevoir les nouveaux champs, celle dont ils viennent et une règle comme « intersect », puis lancez l'outil. Pour les questions du type « quel est le plus proche », utilisez plutôt Join Attributes by Nearest (Joindre les attributs par le plus proche), ou tapez toute la tâche en une phrase à AI Agent.
| Ce que vous voulez | Outil | Durée sur notre test |
|---|---|---|
| Donner à chaque point le nom de la zone où il se trouve | Join Attributes by Location | 0,21 s, 382 écoles |
| Le même résultat, demandé en une phrase | AI Agent | 22 s, comptage et plus proche voisin ensemble |
| Compter ou additionner des points par zone | Join Attributes by Location (Summary) | 0,02 s, 9 zones |
| Trouver l'entité la plus proche et sa distance | Join Attributes by Nearest | 0,06 s, 382 écoles |
Les données de test
Tous les chiffres de ce guide viennent d'une seule série de tests sur des données ouvertes réelles de Lyon, en France, le 15 octobre 2026 :
- 9 arrondissements (les districts de la ville) et 382 écoles issus d'OpenStreetMap.
- 106 arrêts de tram issus d'OpenStreetMap.
- 103 910 bâtiments de la BD TOPO de l'IGN, la base de données topographique nationale française.
Toutes les couches sont en Lambert-93 (EPSG:2154), un système projeté en mètres. Les durées viennent de QGIS 3.44 sur un MacBook Air M4.
Méthode 1 : Join attributes by location
C'est la jointure spatiale classique. Ici, chaque école reçoit le nom de son arrondissement.
Ouvrir l'outil
Vector > Data Management Tools > Join Attributes by Location…. Vous pouvez aussi chercher « join attributes » dans la boîte à outils de traitements (Ctrl+Alt+T).
Choisir les deux couches
Join to features in est la couche qui reçoit les nouveaux champs, ici schools. By comparing to est la couche dont ils viennent, ici arrondissements.
Cocher un prédicat
intersect est le choix sûr par défaut pour des points dans des polygones. La section plus bas explique chaque case.
Choisir les champs et le type de jointure
Dans Fields to add, gardez seulement ce dont vous avez besoin, ici name. Réglez Join type sur un-à-un, et ajoutez un préfixe comme arr_ pour repérer facilement le nouveau champ.
Lancer
Laissez Joined layer en couche temporaire pour vérifier le résultat d'abord, puis enregistrez-la en GeoPackage.

Cochez Discard records which could not be joined seulement si vous voulez écarter les entités sans correspondance. Laissez la case décochée au début : les lignes vides vous montrent ce qui n'a pas marché.
À utiliser quand : vous voulez un ou quelques champs de l'entité dans laquelle chaque objet se trouve ou qu'il touche.
À éviter quand : les entités ne se touchent jamais, comme une école et un arrêt de tram. C'est la méthode 4.
Méthode 2 : demander à AI Agent en une phrase
AI Agent est notre plugin QGIS qui exécute des tâches à partir d'une demande écrite. Il lit les noms de vos couches et de vos champs, choisit les outils et les lance dans votre projet.
Nous lui avons donné cette demande, avec les mêmes couches de Lyon chargées :
Compte les écoles de chaque arrondissement, puis donne à chaque école le nom de l'arrêt de tram le plus proche et la distance qui l'en sépare en mètres.
Il a lancé deux outils de traitement QGIS, puis une courte étape Python qui a écrit les deux nouveaux champs dans la couche des écoles. Le panneau affichait « Worked for 22 s ». Il a demandé une seule fois l'autorisation, car il allait modifier le GeoPackage sur le disque. Ses comptages correspondaient exactement à notre essai manuel : 382 écoles, de 27 dans les 2e et 4e arrondissements à 56 dans le 5e.

À utiliser quand : vous connaissez la question mais pas lequel des quatre outils de jointure y répond, ou quand vous enchaînez plusieurs étapes.
À éviter quand : vous refaites la même jointure chaque semaine. Enregistrez-la une fois comme modèle ou comme script Python.
Prix : offre gratuite, sans carte bancaire. Pro coûte 49 € par mois, hors TVA.
Méthode 3 : compter et résumer avec une jointure spatiale
La méthode 1 donne à chaque école son arrondissement. La question inverse, combien d'écoles contient chaque arrondissement, demande la version résumée.
Cherchez Join attributes by location (summary) dans la boîte à outils de traitements. Placez les polygones dans Join to features in, les points dans By comparing to, et choisissez des statistiques dans Summaries to calculate : nombre, somme, moyenne, médiane, minimum, maximum et d'autres. QGIS ajoute un champ par statistique, nommé par exemple osm_id_count.

Elle additionne aussi des nombres. Sur les bâtiments de l'IGN, un essai a donné à chaque arrondissement son nombre de bâtiments et les logements qui y sont recensés : 9 474 bâtiments et 51 743 logements dans le 3e, le plus élevé pour les deux.
Pour un simple comptage, Vector > Analysis Tools > Count Points in Polygon… (Compter les points dans les polygones) fait la même chose avec moins de réglages.
À utiliser quand : la réponse est un nombre par zone : compte, total, moyenne.
À éviter quand : vous avez besoin de la liste des correspondances elle-même. Utilisez la méthode 1 en un-à-plusieurs.
Méthode 4 : Join attributes by nearest
Quand les entités ne se touchent jamais, joignez-les par la distance. Cherchez Join attributes by nearest dans la boîte à outils de traitements.
Réglez Input layer sur schools, Input layer 2 sur tram_stops et Maximum nearest neighbors sur 1. QGIS ajoute les champs de l'arrêt, un champ distance et les coordonnées des deux extrémités.

Deux réglages changent le résultat :
- Maximum distance. Avec 300 m, seules 86 écoles ont reçu un arrêt. Les 296 autres sont restées dans la sortie avec des champs vides, sauf si vous cochez Discard records which could not be joined.
- Maximum nearest neighbors. Avec 3, les 382 écoles sont devenues 1 146 lignes, une par école et par arrêt. Une égalité exacte ajoute aussi une ligne : sur les 103 910 bâtiments de l'IGN, nous avons obtenu 103 911 lignes.
La distance est calculée à vol d'oiseau, pas en distance de trajet le long des rues.
À utiliser quand : vous demandez « lequel est le plus proche » et « à quelle distance ».
À éviter quand : vous avez besoin d'une distance de trajet. Utilisez les outils d'analyse de réseau de la boîte à outils de traitements.
Quel prédicat cocher
Le prédicat est la règle spatiale qui décide d'une correspondance. QGIS la lit comme « couche A [prédicat] couche B », où A est la couche qui reçoit les champs.

Trois règles couvrent la plupart des cas :
- intersect pour des points dans des polygones, et pour tout ce qui doit seulement se toucher. Il capte aussi les entités situées sur la limite.
- are within quand l'entité doit se trouver entièrement à l'intérieur. Sur nos bâtiments, 112 de ceux qui intersectent Lyon n'étaient pas entièrement dans un seul arrondissement : 108 franchissent la limite de la ville et 4 une limite interne.
- contain pour le sens inverse, les polygones qui contiennent des points.
Vous pouvez cocher plusieurs cases. Une entité correspond alors si l'une des conditions est vraie.
Un-à-un, un-à-plusieurs ou plus grand chevauchement
Un bâtiment situé sur une limite touche deux arrondissements. Le Join type décide de son sort. Sur les 46 250 bâtiments de l'IGN qui intersectent Lyon :
| Type de jointure | Lignes en sortie | Durée |
|---|---|---|
| Un-à-plusieurs (une entité par correspondance) | 46 254 | 1,13 s |
| Première entité correspondante seulement (un-à-un) | 46 250 | 0,99 s |
| Plus grand chevauchement seulement (un-à-un) | 46 250 | 9,62 s |
Le un-à-plusieurs a dupliqué les 4 bâtiments à cheval sur une limite interne. C'est correct pour une liste de correspondances et faux pour toute somme : ces bâtiments seraient comptés deux fois.
« Première correspondance » garde celle que QGIS rencontre en premier, donc un bâtiment en limite peut atterrir dans l'un ou l'autre arrondissement. « Plus grand chevauchement » choisit l'arrondissement qui contient la plus grande partie du bâtiment, ce qui est la réponse la plus juste, mais il a fallu dix fois plus de temps ici.
Les pièges de CRS
Un mauvais système de coordonnées de référence arrête rarement une jointure. Il change le résultat sans bruit.
- Des CRS différents fonctionnent pour les jointures par localisation. Nous avons laissé les écoles en WGS 84 (EPSG:4326) et les arrondissements en Lambert-93. QGIS a reprojeté à la volée et les 382 écoles ont été appariées.
- Les distances suivent les unités de la couche en entrée. Lancez Join by nearest sur les fichiers en WGS 84 et la « distance » médiane sort à 0,0071. Ce sont des degrés, pas des mètres. Reprojetez d'abord les deux couches dans un CRS projeté en mètres, avec
Vector > Data Management Tools > Reproject Layer…(Reprojeter une couche). - Maximum distance utilise les mêmes unités. Une valeur de 300 en degrés couvre la planète entière.
Notre guide sur ce qu'est un CRS explique la différence entre degrés et mètres et comment corriger une couche mal placée.
Vitesse sur les grosses couches
QGIS traite des jointures à l'échelle d'une ville en quelques secondes. Sur les 103 910 bâtiments de l'IGN :
- Jointure un-à-un avec les 9 arrondissements : 0,97 s depuis un GeoPackage.
- La même couche en Shapefile : 1,69 s. Après
Vector > Data Management Tools > Create Spatial Index…(Créer un index spatial), 1,04 s. - Arrêt de tram le plus proche pour chaque bâtiment : 3,5 s.
- Plus grand chevauchement : 9,62 s, l'option la plus lente.
Quatre habitudes gardent les grosses jointures rapides :
- Travaillez depuis un GeoPackage. Il embarque un index spatial. Un Shapefile a besoin de son fichier
.qix, que Create Spatial Index écrit. - Demandez moins de champs. Remplissez Fields to add au lieu de tout copier.
- Évitez le plus grand chevauchement sauf si les entités en limite comptent vraiment.
- Réparez les géométries d'abord. Un polygone invalide arrête le traitement avec le message « has invalid geometry ». L'outil Fix geometries (Réparer les géométries) de la boîte à outils de traitements le corrige. Vous pouvez aussi modifier Invalid feature filtering sous l'icône de clé à molette à côté de la couche en entrée.
Vérifiez aussi où se trouvent vos points. Seuls 211 des 382 points d'écoles tombaient dans un bâtiment de l'IGN. Les autres marquent des cours et des terrains de jeux, donc « école dans un bâtiment » aurait manqué 171 écoles.
À retenir
Utilisez Join Attributes by Location avec intersect pour donner aux points le nom de leur zone.
Utilisez la version Summary pour compter ou additionner par zone, et Join Attributes by Nearest pour l'entité la plus proche et sa distance.
Choisissez un-à-un pour les totaux, et un-à-plusieurs quand vous avez besoin de chaque correspondance.
Reprojetez dans un CRS en mètres avant tout calcul de distance.
Si vous ne savez pas quel outil convient, décrivez le résultat voulu à AI Agent et vérifiez ce qu'il a construit.
Questions fréquentes
Qu'est-ce qu'une jointure spatiale dans QGIS ?
Une jointure spatiale ajoute les champs d'une couche à une autre en fonction de la position : à l'intérieur, au contact ou le plus proche. Dans QGIS, les principaux outils sont Join Attributes by Location, sa version Summary pour les comptages et les statistiques, et Join Attributes by Nearest pour les distances.
Comment joindre des attributs par localisation dans QGIS ?
Ouvrez Vector > Data Management Tools > Join Attributes by Location…. Indiquez la couche qui reçoit les champs dans Join to features in et la couche source dans By comparing to, cochez intersect, choisissez les champs et un type de jointure un-à-un, puis lancez l'outil.
Quelle différence entre la jointure par localisation et la jointure par le plus proche ?
La jointure par localisation exige que les entités se touchent ou se chevauchent, selon le prédicat coché. La jointure par le plus proche n'exige aucun contact : elle trouve l'entité la plus proche et ajoute un champ de distance, dans les unités du CRS de la couche en entrée.
Pourquoi ma jointure spatiale renvoie-t-elle des champs vides ?
En général, les entités ne respectent pas le prédicat : des points juste à l'extérieur des polygones, un prédicat trop strict comme « are within », ou des géométries invalides. Vérifiez les deux couches sur la carte, essayez « intersect » et lancez Fix Geometries. Un CRS manquant sur une couche la place aussi au mauvais endroit.
Une IA peut-elle faire une jointure spatiale dans QGIS ?
Oui. AI Agent lance les outils QGIS à partir d'une demande écrite. Sur notre test lyonnais, il a fait un comptage par arrondissement et une jointure par le plus proche à partir d'une seule phrase en 22 secondes, avec les mêmes résultats que l'essai manuel.
Essayer AI Agent gratuitement dans QGIS, sans carte bancaire
, ouvrez 

