Durée : ~ 2 heures
9 - Jointure
L'objectif de ce chapitre est d'aborder la notion de jointure.
Pour les besoins de ce tutoriel nous utiliserons les bases de données suivantes :
- Communes de l'Ouest de l'Indre et Loire .shp
- Population du département d'Indre et Loire par commune .csv
- Bâtiments de l'Ouest de l'Indre et Loire .shp
Une jointure permet de joindre (ou d'assembler) deux tables attributaires. L'objectif d'une telle manipulation est d'enrichir une couche de données vecteurs à partir des données contenus dans les tables attributaires de d'autres couches. Comme pour les requetes, il existe de types de jointures : les jointures attributaires et les jointures spatiales.
9.1 - Jointure attributaire
Pour faire une jointure attributaire entre deux couches, on se base sur la table attributaire et plus particulièrement sur un champ qui se retrouve dans chacune des deux tables (par exemple le code INSEE d'une commune, l'identifiant d'une route, etc.). Trois élements sont nécessaires pour pouvoir faire une jointure attributaire :
- Une couche vecteur;
- Une seconde couche vecteur ou au moins une table au format csv;
- Un champs commun dans la table attributaire de la première couche vecteur et dans la seconde ou dans la table au format csv.
Exercice 9.1 : Faire une jointure attributaire
1/ Créer un nouveau projet QGis, et charger la couche « OuestD37_communes ».
2/ Ajouter la table D37_Population (s’aider de l'exercice 4.5 si nécessaire). Ici, aucune information géographique n’est contenue dans la table. Après avoir ouvert l’interface vous permettant d’ajouter une couche de texte délimité, dans « Définition de la géométrie » cocher « Pas de géométrie ».
3/ Pour pouvoir faire une jointure selon les attributs, il faut que les deux tables (ici celle de la couche, et celle issue du fichier texte) aient un champ en commun (i.e. contenant les mêmes données). Explorer les deux tables et identifier le champ commun.
Il existe plusieurs champs communs mais le seul à contenir exactement les mêmes données sans risque d'erreur d'association est le champ « code INSEE ». Dans le cas où plusieurs correspondances de données existent, toujours privilégier les champs contenant des nombres ou des identifiants.
4/ Faire un clic droit sur la couche OuestD37_communes et aller dans « Propriétés>Jointures ».
5/ Créer une nouvelle jointure en cliquant sur l’icône , et compléter la fenêtre de paramètres de la manière suivante :
- Joindre la couche : sélectionner la table ajoutée au 1/
- Champ de jointure : sélectionner le champ de commun aux deux tables.
- Champ dans la couche cible : sélectionner le champ commun aux deux tables.
- Cocher « Choisir les champs à joindre » et sélectionner le champ correspondant à la population au recensement 2016 (cette option est très utile lorsque les tables à joindre comprennent beaucoup de colonnes).
- Cocher « Personnaliser le préfixe des champs » et laisser vide le champ (pour rappel le nom d’un champ ne peut excéder 10 caractères).
- Terminer la jointure en cliquant sur « OK ».
6/ Ouvrir la table attributaire de la couche issue de la jointure de l’exercice 1 et vérifier que les données de population ont bien été ajoutées.
!
Attention
La jointure attributaire ne modifie pas la couche : les données ne sont pas enregistrées dans le fichier .dbf associé à la couche. Il est donc nécessaire d’enregistrer les changements si on souhaite conserver les données jointes pour un traitement ultérieur.6/ Enregistrer la couche et vérifier que les données de population ont bien été conservées.
9.2 - Jointure spatiale
Les jointures spatiales se font dans l'espace en comparant la géométrie des entités à l'aide d'un prédicat géométrique. Les finalités des jointures spatiales sont multiples.
Par exemple, considérons deux couches : une couche de points représentant des écoles et une couche de polygones représentant des communes. La table attributaire de la couche des écoles contient l'information d'une nombre d'élève par école. On souhaite calculer le nombre d'élève par commune. Il suffira pour cela de faire une jointure spatiale sur la couche des communes en spécifiant que les attributs de la couche des écoles doivent être résumés sous la forme d'une somme.
Exercice 9.2 : Faire une jointure spatiale
L’objectif de cet exercice est de calculer la surface bâtie dans chacune des communes de la zone d’étude (ici réduite à quelques communes de l’ouest du département d’Indre-et-Loire. Pour se faire, nous allons réaliser une jointure spatiale.
1/ Créer un nouveau projet QGis, et charger les couches « >OuestD37_batiments » et « OuestD37_communes ».
2/ Aller dans « Traitement>Boite à outil » puis dans le menu de droite « Outils généraux pour les vecteurs>Joindre les attributs par localisation (résumé) »).
3/ Configurer les différents paramètres de la manière suivante :
- Couche source : « OuestD37_communes ».
- Joindre la couche : « OuestD37_batiments ».
- Prédicat géométrique : « intersecte ».
- Dans « Champ à résumer » cliquer sur les trois points et cocher « Surf_m2 ».
- Dans « Résumé à calculer » cliquer sur les trois points et cocher « compte » et « Somme ».
4/ Lancer la jointure et enregistrer la couche temporaire produite.
5/ Dans le dossier où la couche a été enregistrée, ouvrir le fichier .dbf de la couche (avec excel ou libre office par exemple).
6/ La colonne nommée « surf_m2_co » correspond au nombre d’entités ayant été jointes pour chaque commune. La colonne nommée « surf_m2_su » correspond à la somme des surfaces des bâtiments. Calculer le nombre total d’entités.
7/ Retourner dans QGis et déterminer le nombre totale d’entités dans la couche « OuestD37_batiment » (soit depuis la table attributaire soit depuis l’onglet « Propriétés>Information »).
8/ Comparer les deux nombres trouvés et donner une explication de la différence.
6/ la couche issue de la jointure décompte 39 318 entités
7/ La couche des bâtiments contient 39 307 entités
8/ La couche issue de la jointure recense a priori plus de bâtiment qu'il n'y en a au sein de la couche d'origine. Cela est du à l'utilisation du prédicat géométrique « intersecte ». Il existe en effet quelques bâtiment à cheval sur deux communes. Avec ce prédicat, ces bâtiments sont comptés deux fois. Il n'y a pas de solution simple pour résoudre ce problème. En utilisant le prédicat « à l'intérieur », ces entités auraient été exclues du calcul. Une solution (pas exempt de nouveaux problèmes) serait de découper les bâtiments à cheval sur deux communes selon les limites communales. Cependant, au regard du nombre total de bâtiments, cette situation se retrouve dans assez peu d'entités.