Import de données attributaires suivi d'une jointure
Import de données attributaires suivi d'une jointure
La jointure attributaire permet de joindre une table attributaire (ne comportant pas d'objets géométriques, par ex. un fichier .TXT / .CSV / DBF / XLS / XLSX / ODS) chargée dans QGIS avec une couche vectorielle géographique déjà chargée dans QGIS.
Il faut faire attention à ce qu'une ligne de la table de la couche vectorielle soit en correspondance avec au plus une (0 ou 1) ligne de la table attributaire à joindre, sinon QGIS prendra une ligne correspondante de façon imprévisible.
Les formats autorisés sont les formats texte délimité (.txt, .csv, .dbf), les formats de feuille de calcul (xls, xslx, ods) et les formats de bases de données gérés par QGIS : SQLite, PostgreSQL (Les formats de bases de données ne sont pas étudiés dans la présente formation)
Méthode : Import de données attributaires avec jointure
L'objectif est d'importer les données attributaires contenus dans le fichier CSV ATTRIBUTS_COMMUNES.csv et de le joindre à la couche géographique COMMUNE.SHP
Ouvrir la couche géographique COMMUNE (data_foad_qgis/BD_TOPO/H_ADMINISTRATIF/COMMUNE.SHP) avec la commande "Couche/Ajouter une couche vecteur" ou cliquer sur l'icône

Ouvrir la couche attributaire ATTRIBUTS_COMMUNES (data_foad_qgis/Divers/ATTRIBUTS_COMMUNES.csv) avec la commande "Couche/Ajouter une couche vecteur" ou cliquer sur l'icône

Choisir le type de fichier « Valeurs séparées par une virgule [OGR] (*.csv) »
Les 2 couches sont ouvertes dans QGIS :


La table attributaire de la couche COMMUNE se présente comme suit :

Celle de la couche (non géographique) ATTRIBUTS_COMMUNES est la suivante :

La jointure sera effectuée sur le code INSEE, qui est présent dans les 2 tables attributaires :
Couche COMMUNE : champ CODE_INSEE
Couche ATTRIBUTS_COMMUNES : champ INSEE_COMM

CONSEIL
Même si QGIS peut joindre des champs de types différents (numérique et chaîne de caractères), il est conseillé d'utiliser des champs de même type.
Dans le cas présent les champs CODE_INSEE et INSEE_COMM sont de type chaîne de caractères.

Double-cliquer sur le nom de la couche géographique (COMMUNE) dans la fenêtre des couches pour ouvrir la fenêtre des propriétés de la couche.

Dans l'onglet jointure,cliquer sur le bouton ‘+' et dans la boîte de dialogue ‘Ajouter une jointure vectorielle', choisir :
La couche attributaire à joindre (la couche de texte délimité) : ATTRIBUTS_COMMUNES
Le champ de la couche attributaire à joindre : INSEE_COMM
Le champ ciblé de la couche vectorielle géographique : CODE_INSEE
On choisira de préfixé les champs de la table à joindre avec un préfixe court (par défaut c'est le nom de la table distante ce qui peut conduire à des noms de champs très longs et éventuellement poser problèmes avec le format SHP qui limite les noms de champs à 10 caractères).

Valider avec Ok
La jointure à réaliser apparaît dans la fenêtre des propriétés de la couche avec, si on veut l'afficher, le résumé des paramètres de jointure :

Il est possible de modifier la jointure par un double-clic dessus, puis la boîte de dialogue s'ouvre à nouveau.
Valider avec OK pour réaliser la jointure
Les attributs de la couche de texte délimité sont alors ajoutés à chaque élément de la couche vectorielle géographique :

L'enregistrement du projet QGIS permet de sauvegarder cette jointure et de prendre en en compte les mises à jour successives de la couche attributaire (le fichier .CSV), effectuées hors QGIS.
Le résultat de la jointure peut être sauvegardé dans une nouvelle table vecteur.
Dans ce cas, il faut sauvegarder la couche vecteur résultat de la jointure avec la commande ‘Menu Couche>Sauvegarder sous...' ou clic droit sur la couche vectorielle géographique (COMMUNE) et commande ‘Sauvegarder sous...'
Remarque : Édition des champs de jointure
Si l'option 'jointure de table éditable' n'a pas été activée lors de la définition de la jointure, les champs joints ne sont pas directement éditables dans la couche résultante. On ne peut alors les éditer qu'en passant par le fichier de la table d'origine ou bien en sauvegardant la couche vecteur résultant de la jointure comme nouvelle table.
Si l'option "Jointure de table éditable" a été activée dans la fenêtre de dialogue Jointure.
Les entités de la table jointe peuvent être modifiées à la condition d'activer également le mode édition pour la couche d'origine des entités jointes.
Remarque : Types de champs
Lorsqu'on importe un fichier CSV seul dans QGIS, toutes les colonnes du fichier sont interprétées comme des chaînes de caractères et les colonnes de la jointure sont dans ce cas en format texte.
Pour importer et joindre tous les types de champs reconnus par QGIS, notamment les champs numériques, il est nécessaire d'associer au fichier CSV un fichier CSVT portant le même nom et enregistré dans le même répertoire.
Le fichier CSVT qui contient la structure et le format des champs du fichier CSV est automatiquement détecté quand celui-ci est importé dans QGIS.
Un exemple est décrit dans le chapitre 'Export de données attributaires'.
Remarque : Filtrage sur champs joints
On peut vouloir filtrer une table pour laquelle une jointure a été réalisée.
Dans ce cas QGIS affiche un message proposant de transformer la couche en 'couche virtuelle'.
La notion de couche virtuelle a été développé dans QGIS pour réaliser des requêtes SQL sur une ou plusieurs tables ouvertes dans QGIS. Le SQL est un point qui est abordé dans la formation Perfectionnement.
Pour réaliser un filtre sur une couche jointe il suffit de répondre ok à la boite de dialogue :

Nous reverrons plus en détail les couches virtuelles dans la formation perfectionnement.