Vous cherchez à connaître le total ou la moyenne d’une variable par zone géographique? Vous voulez connaître par exemple la surface bâtie communale par maille de 500 x 500 m? Ce tutoriel SIG enseigne comment utiliser la jointure spatiale dans QGIS. Après avoir défini la jointure spatiale, trois modules du logiciel SIG sont présentés. Puis, les manipulations de données géographiques par ces modules sont comparées à des requêtes SQL PostGIS. Enfin, on mettra en pratique ces acquis par une analyse spatiale.
- I. Définition de la jointure spatiale
- II. Les outils de jointure spatiale dans QGIS
- III. Jointure spatiale : Mise en application
I. Définition de la jointure spatiale
La jointure spatiale associe des champs et des valeurs attributaires d’une couche SIG à une table d’une autre donnée géographique. L’association entre la table attributaire de la couche source et la table jointe se réalise en fonction de la relation spatiale entre les différentes géométries des deux vecteurs concernés. La clé de jointure n’est pas un caractère mais une relation géographique entre les éléments localisés. Chaque géométrie de la couche source peut avoir:
- une seule correspondance spatiale avec une géométrie du vecteur joint. Les attributs de cette géométrie s’associent alors à ceux de la géométrie source. On parle de relation spatiale 1 à 1.
- Si la géométrie du vecteur source a plusieurs correspondances avec des géométries du vecteur joint alors la géométrie source se duplique autant de fois qu’il y a de correspondances spatiales. On parle de relation spatiale 1 à n.
La jointure spatiale n’a donc pas pour objectif de modifier les géométries du vecteur source contrairement à un traitement géométrique telle une intersection.
II. Les outils de jointure spatiale dans QGIS
Dans QGIS, la boîte à outils propose deux modules pour réaliser la jointure spatiale (figure 1):
1. Joindre les attributs par localisation;
2. Puis, Joindre les attributs par localisation (résumé).
II.1. Joindre les attributs par localisation
Joindre les attributs par localisation dans QGIS s’appuie sur plusieurs paramètres (figure 2) :
- Couche de base : les entités géographiques de la couche en entrée sont conservées ou dupliquées selon la correspondance spatiale avec les entités de la couche jointe et le type de jointure choisie.
- Joindre la couche : couche SIG jointe.
- Prédicat géométrique : type de correspondance spatiale. Par exemple, si les géométries des entités de la couche jointe intersectent les entités de la couche en entrée, alors les valeurs attributaires des champs à ajouter choisis s’associent à l’entité de la couche en entrée. Cette dernière se duplique en fonction du nombre d’intersections pour le type de jointure de un à plusieurs.
- Champs à ajouter : choix des champs attributaires de la couche SIG jointe.
- Puis, le type de jointure
- Créer une entité distincte pour chaque entité correspondante (un à plusieurs)
- Prendre uniquement les attributs de la première entité correspondante (un à un)
- Prendre uniquement les attributs de l’entité qui a le plus grand chevauchement (un à un)
- Entités non joignables à partir de la première couche : les entités géographiques de la couche jointe sans correspondance spatiale avec la couche en entrée constituent un autre vecteur.
Les valeurs attributaires des champs joints sont nulles pour les entités géométriques du vecteur en entrée qui n’ont pas de correspondance spatiale avec les géométries de la couche jointe. Enfin, il est possible de supprimer ces entités en sélectionnant Supprimer les enregistrements qui ne peuvent être joints.
Requêtes SQL de jointures spatiales
Les adeptes de PostGIS devinent les requêtes SQL associées pour une relation de 1 à n :
LEFT JOIN permet de garder toutes les entités de la couche en entrée non joints.
SELECT * FROM <couche en entrée A> LEFT JOIN <couche jointe B> ON ST_<prédicat géométrique>(<champ géométrique A>,<champ géométrique B>);
INNER JOIN supprime les enregistrements non joints :
SELECT * FROM <couche en entrée A> INNER JOIN <couche jointe B> ON ST_<prédicat géométrique>(<champ géométrique A>,<champ géométrique B>);
ST_<prédicat géométrique> est par exemple ST_INTERSECTS pour une jointure spatiale par intersection entre les deux couches.
II.2. Agrégation
QGIS permet d’agréger des objets géographiques en les regroupant par un champ attributaire ou une expression (figure 3). Certes l’agrégation ne consiste pas en une jointure spatiale. Mais c’est une suite de traitement logique pour les entités géométriques dupliquées par la jointure spatiale de 1 à n. L’outil Agrégation a pour résultats :
- la fusion des géométries ayant la même valeur de champ (ou d’expression) de regroupement. Ces nouvelles géométries sont multi parties comme des multipoints, des multilignes ou des multipolygones.
- le calcul des valeurs attributaires par une fonction d’agrégat telles une somme, une moyenne, une médiane. Un tableau peut stocker les valeurs uniques.
Requête SQL de regroupement
Des fonctions d’agrégat courantes dans PostgreSQL sont SUM pour le calcul de la somme, AVG pour la moyenne, MIN et MAX respectivement pour le minimum et le maximum de valeurs numériques. Les valeurs uniques des entités regroupées sont stockés dans des tableaux grâce à des fonctions comme JSON_AGG. La fonction ST_UNION fusionne les géométries du vecteur en entrée. La clause de regroupement est introduite par GROUP BY. La syntaxe de la requête SQL est :
SELECT <fonctions d'agrégat(colonne)>, ST_UNION(<champ géométrique>) FROM <couche> GROUP BY <colonne(s)>;
II.3. Joindre les attributs par localisation (résumé)
Le deuxième outil QGIS permet de réaliser la jointure spatiale avec l’agrégation de certaines valeurs. Le résultat de ce traitement géographique est une relation de 1 à 1 entre les entités de la couche en entrée et celles de la couche jointe. Ainsi, le module Joindre les attributs par localisation (résumé) spécifie :
- les champs à résumer : les valeurs attributaires des entités de la couche jointe par le prédicat géométrique sont agrégés.
- puis, les résumés à calculer : la figure 5 présente la liste des fonctions d’agrégat des valeurs attributaires groupées.
III. Jointure spatiale : Mise en application
Cette section vise à mettre en application l’outil QGIS Joindre les attributs par localisation (résumé). L’objectif est la cartographie la surface bâtie sur une maille de 500 m x 500 m à l’échelle de l’étendue communale. Les données utilisées sont les vecteurs du Bâti et de la commune Le Bouscat (33069) en Gironde (figure 6). Ces couches SIG proviennent de la BD TOPO de l’IGN.
Deux traitements QGIS sont nécessaires :
- la création d’une grille régulière se basant sur l’étendue de la commune;
- puis, la jointure spatiale de ce nouveau vecteur avec la couche du bâti.
III.1. Création d’une grille régulière à l’échelle communale
Le module de création d’une grille se situe dans le menu Vecteur de QGIS : Outils de recherche > Créer une grille… . Les paramètres de la grille sont comme le montre la figure 7 ci-après :
- le type de grille : les géométries des entités du vecteur créé (points, lignes, polygones, etc).
- l’étendue de la grille : la fenêtre géographique du vecteur peut s’appuyer sur celle d’une couche SIG du projet QGIS, l’étendue du canevas ou un polygone dessiné par l’utilisateur.
- puis, les espacements horizontaux et verticaux correspondant à la taille de la cellule de la grille respectivement en longitude (x) et latitude (y). L’unité dépend de la projection géographique choisie. La création d’une grille régulière consiste à définir une taille identique en longitude et latitude. Ainsi, l’espace vertical et horizontal est égal à 500 m pour cette étude de cas.
- les superpositions verticales et horizontales décalent les colonnes et les lignes les unes par rapport aux autres selon une distance en unité de projection. A titre d’exemple, ce type de grille est comparable au résultat de l’emprise des photos acquises par drone lors d’un vol programmé.
- enfin, le SCR (Système de Coordonnées de Référence) de la grille.
La figure 8 ci-dessous montre le vecteur (en vert) de la grille régulière d’une taille de la cellule de 500 m x 500 m. L’étendue de la grille se base sur la fenêtre géographique du vecteur de la commune (en orange) en partant de la longitude minimale (xmin) et la latitude maximale (ymax).
III.2. Jointure spatiale des cellules de la grille avec la bâti
Le vecteur de la grille sert de couche de base à laquelle on associe les entités géographiques des bâtiments par une correspondance spatiale. La jointure spatiale des cellules de la grille avec le bâti s’appuie sur le prédicat géométrique de la contenance (figure 9). En clair, le calcul de la superficie totale des bâtiments strictement contenus dans chaque cellule de la grille s’ajoute comme nouveau champ de la table attributaire du vecteur de la grille. Ainsi, le champ résumé est le champ attributaire appelé surface de la couche SIG du bâti. Le résumé à calculer est la somme pour cet exemple.
Ensuite, la symbologie graduée du vecteur issu de la jointure spatiale met en évidence les classes de la surface totale du bâti par l’algorithme de Jenks. Ici, la représentation cartographique de la surface totale bâtie par cellule de la grille de 500 m x 500 m s’appuie sur sept classes.
Discussions
En discussion, le résultat de la surface totale bâtie est visible sur l’ensemble de la grille. Par extension, plusieurs traitements sont possibles afin de ne prendre en compte que les mailles de la commune. Tout d’abord, vous sélectionnez les bâtis à l’intérieur de la commune avant la jointure spatiale. Vous supprimez les éléments de la grille n’ayant pas de jointure. Puis, vous réalisez l’intersection du vecteur issu de la jointure spatiale avec le vecteur de la commune.
ÉDIT. De plus, comme le précise Vincent en commentaire, la surface totale du bâti prend en compte seulement les bâtiments strictement contenus dans la maille. Ainsi, les surfaces des entités géographiques intersectant plusieurs mailles ne sont pas ajoutées dans la surface totale du bâti par maille.
- QGIS: ajouter automatiquement l’attribut d’une autre coucheVous dessinez un point sur une couche SIG et vous voulez connaître la commune associée? Dans QGIS, il est possible d’ajouter automatiquement l’attribut d’une autre couche dans une donnée cible. Dans ce tutoriel… Continuer à lire
- GeoJSON dans QGIS : ouvrir, visualiser et exporter un fichierLe format GeoJSON est un format d’encodage de données géospatiales basé sur JavaScript Object Notation (JSON). Pour rappel, c’est un format standardisé par l’Internet Engineering Task Force (IETF) qui a publié le référentiel… Continuer à lire
- Identifiant unique auto-incrémenté dans QGISLa création d’un identifiant unique affecté aux entités d’un vecteur garantit l’indexation de chaque objet géographique. L’attribution d’une numérotation distincte assure le classement des entités vectorielles. Ce tutoriel SIG montre comment ajouter un… Continuer à lire
- Déplacer une entité dans QGISCe tutoriel QGIS porte sur la numérisation d’un vecteur. Il s’agit de déplacer une entité d’une couche vectorielle dans QGIS. La manipulation des données géographiques s’appuie sur l’exemple des départements français. Alors, comment… Continuer à lire
Bonjour, comment afficher les coordonnées géographiques sur les grilles de 500m x 500m
Bonjour Philémon,
Vous voulez afficher les coordonnées géographiques sur la mise en page de la carte? ou en étiquette sur le canevas de la carte?
Attention il y a un biais dans l’exemple : les surfaces de bâtiment qui sont en intersection sur plusieurs mailles de la grille ne sont pas comptabilisés, le prédicat étant une inclusion stricte. Il faut les traiter distinctement, de préférence en découpant les géométries par la grille de façon à comptabiliser chaque partie de bâtiment en intersection sur la bonne maille.
Merci Vincent pour cette précision importante. J’ai ajouté un paragraphe en discussion.