VIII. Lier des données de deux sources différentes : les jointures
VIII.2 Lier des données en fonction de leur position : jointures spatiales
- Comment fonctionne une jointure spatiale ?
- Joindre des éléments un à un
- Joindre plusieurs éléments à un seul
Comment fonctionne une jointure spatiale ?
Pour faire une jointure, il est possible de se baser sur la position des éléments et non plus sur leurs données attributaires : il s'agit alors d'une jointure spatiale.
Ce type de jointure ne peut se faire qu'entre deux couches SIG, de type point, ligne ou polygone. Il est possible par exemple de partir d'une couche de polygones et d'une couche point, et de lier à chaque polygone les données attributaires du point contenu par ce polygone.
Notez bien que comme pour une jointure attributaire, les données qui seront jointes sont toujours les données attributaires.
Dans l'exemple ci-dessus, les deux couches de départ sont une couche de département et une couche de chefs-lieux. Les données attributaires des chefs-lieux (leur nom, code et coordonnées) sont jointes aux départements en se basant sur leur position : chaque département récupère les données du chef-lieu intersectant ce département.
Il existe plusieurs outils pour cela dans QGIS ; nous utiliserons celui présentant a priori le plus de possibilités.
Joindre des éléments un à un
Premier exemple détaillé : quel chef-lieu pour quel département ?
Voyons tout d'abord le cas où les données correspondent une à une, par exemple pour joindre les données d'un chef-lieu au département qui lui correspond.
Ouvrez un nouveau projet QGIS, ajoutez les deux couches shapefile DEPARTEMENT et CHEF_LIEU.
Ouvrez les tables attributaires des 2 couches : il n'existe pas de champ permettant de faire une jointure attributaire entre les couches (même s'il serait possible de récupérer le code du département à partir du code INSEE, mais nous ferons comme si pour les besoins de l'exercice...).
Si vous avez le choix entre effectuer une jointure attributaire et une jointure spatiale pour le même résultat, choisissez la jointure attributaire : les temps de traitements seront moins longs, et vous vous affranchirez aussi d'éventuels problèmes liés aux géométries, par exemple des erreurs de topologie.
Par contre, chaque chef-lieu est situé dans un département ; il est donc possible d'associer les 2 avec un opérateur spatial comme par exemple contient.
Le but de l'opération est d'ajouter des colonnes dans la table attributaire de la couche de départements, avec le nom du chef-lieu, son statut etc. Bien sûr, l'inverse est également possible : ajouter dans la table attributaire des chefs-lieux des colonnes avec le nom du département, son code etc.
Dans la boîte à outils de traitements, rubrique Outils généraux pour les vecteurs, double-cliquez sur Joindre les attributs par localisation.
- Couche source : sélectionnez la couche DEPARTEMENT
- Joindre la couche : sélectionnez la couche CHEF_LIEU
- Prédicat géométrique : vous pouvez choisir intersecte, ou bien contient
- Champs à ajouter : il est possible de n'ajouter que certains champs de la couche à joindre. Laisser vide pour ajouter tous les champs
- Type de jointure : dans la mesure où ici, un chef-lieu correspond exactement à un département, vous pouvez choisir l'une ou l'autre option et le résultat sera le même
- Couche issue de la jointure spatiale : laisser la valeur par défaut Créer une couche temporaire
- Cliquez sur Exécuter
Vous pouvez fermer la fenêtre de l'outil de jointure.
Une couche temporaire a été ajoutée à QGIS. Ses géométries sont celles de la couche source, ici les départements.
Ouvrez sa table attributaire : elle contient les attributs des départements et des chefs-lieux.
Pour s'entraîner : quel comté pour quel site remarquable ?
Ouvrez un nouveau projet QGIS, ajoutez les couches Counties et Heritage, correspondant aux comtés et sites remarquables irlandais.
Il existe d'autres moyens pour faire une jointure spatiale, notamment en passant par une base de données relationnelle type PostgreSQL avec son extension spatiale PostGIS, ou bien à l'aide du plugin mmqgis...
Joindre plusieurs éléments à un seul
Nous avons vu le cas où l'on souhaite joindre des données une à une.
Comment faire maintenant si une entité dans la couche source correspond à plusieurs entités dans la couche à joindre ? Par exemple, en reprenant l'exemple des comtés (données surfaciques) et sites remarquables (données ponctuelles) irlandais, on peut vouloir joindre les données des sites aux comtés. Chaque comté contenant plusieurs sites, il y a 2 possibilités pour faire la jointure :
- créer autant de comtés que de sites. Les géométries des comtés seront donc en double, triple etc., chacune avec les données attributaire d'un site
- décider d'une méthode d'agrégation pour joindre par exemple à chaque comté la moyenne, le nombre, la concaténation... des champs de la couche de sites. Cette dernière méthode est généralement la plus utile.
Avant de procéder à la jointure, il est important de bien réfléchir aux questions que l'on voudra poser par la suite aux données : que cherche-t-on à faire ? Quelle sera la prochaine étape ?
Compter le nombre de sites par comté
Le but sera ici de compter le nombre de sites remarquables par comté.
Ouvrez un nouveau projet QGIS, ajoutez les couches Counties et Heritage, correspondant aux comtés et sites remarquables irlandais.
Boîte à outils de traitement → Outils généraux pour les vecteurs → Joindre les attributs par localisation (résumé)
- Couche source : Counties
- Joindre la couche : Heritage
- Prédicat géométrique : Intersecte, ou bien Contient
- Champs à résumer : cliquez sur le bouton ... à droite, et choisissez un champ d'identifiant unique, ici OBJECTID (NAMN1 donnerait le même résultat, dans la mesure où chaque site a un nom différent)
- Résumés à calculer : cliquez sur le bouton ... à droite, et cochez compte pour compter le nombre de sites par comté
- Couche issue de la jointure spatiale : laissez la valeur par défaut pour créer une couche temporaire
- Cliquez sur Exécuter
La couche créée possède les même géométries que la couche Counties. Ouvrez sa table attributaire.
Calculer la population par département à partir des communes
Nous allons ici partir d'une couche de communes avec un champ population, et d'une couche de départements. L'objectif sera de calculer pour chaque département la population totale, la population moyenne par commune et la population médiane par commune.
Ouvrez un nouveau projet QGIS, ajoutez les couches COMMUNE et DEPARTEMENT.
Ouvrez la table attributaire de la couche de communes, vérifiez que le champ POPULATION soit bien présent.
Boîte à outils de traitement → Outils généraux pour les vecteurs → Joindre les attributs par localisation (résumé)
- Couche source : DEPARTEMENT
- Joindre la couche : COMMUNE
- Prédicat géométrique : choisissez contient. Avec l'opérateur Intersecte, les communes limitrophes seraient également prises en compte, ce qui n'est pas souhaité ici.
- Champs à résumer : cliquez sur le bouton ... à droite, et choisissez le champ POPULATION
- Résumés à calculer : cliquez sur le bouton ... à droite, et cochez somme, moyenne et médiane pour calculer ces valeurs pour chaque département.
- Couche issue de la jointure spatiale : laissez la valeur par défaut pour créer une couche temporaire
- Cliquez sur Exécuter. Attention, le temps de traitement peut être un peu long.
La couche temporaire est ajoutée à QGIS. Ses géométries sont celles des départements. Ouvrez sa table attributaire, vérifiez son contenu : on connaît maintenant pour chaque département la population totale (POPULATION_sum), la population communale moyenne (POPULATION_mean) et la population communale mediane (POPULATION_median).
Il est possible d'utiliser d'autres méthodes pour réaliser les jointures spatiales, par exemple avec le plugin mmqgis, ou bien via une requête SQL.
Concernant cette dernière méthode, avec utilisation des couches virtuelles, les temps de traitement sont parfois longs en particulier avec des opérateurs spatiaux. L'utilisation de Postgresql/PostGIS améliore grandement ces temps de traitement, mais ceci sort de l'objet de ce tutoriel !
chapitre précédent partie IX : analyse spatiale
haut de page