TP - Créer des relations entre les données vectorielles#
QGIS permet de décrire comment les données de différentes couches sont reliées entre-elles. On parle de relations. Le cas le plus connu est le lien entre un objet spatial et la commune via le code INSEE.
Avec les données exploitées dans notre exemple d'observations, on va relier :
- les observations avec une table qui liste les espèces
- les observations avec les communes
Charger les données "especes" et "communes"#
Pour pouvoir montrer la gestion des relations dans QGIS, nous allons charger deux nouvelles couches du fichier donnees.gpkg.
Enregistrez ce fichier à côté de votre projet QGIS puis via l'explorateur
dans le menu Dossier du projet, ouvrir l'arbre et charger :
- la table non spatiale
especes - la table spatiale des
communes

On veut créer une table de nomenclature pour les espèces#
Dans la table source, on a pour l'instant un nom d'espèce
dans le champ espece_support:

On souhaite faire le lien entre la table especes et les observations
par le biais de ce champ espece_support.
On pourra ensuite créer une relation entre les observations et les espèces.
Ajouter une clé étrangère dans la table observations avec l'id de l'espèce#
Avec la calculatrice de champs, pour la couche observations,
on ajoute un champ id_espece de type Texte et on va
le remplir à l'aide d'une expression basée sur :
- la méthode
get_featurequi permet de récupérer une ligne d'une autre couche, iciespecesen faisant la correspondance entre les valeurs (comme pour une jointure) - la méthode
attributesqui permet de récupérer les valeurs des champs pour cette ligne, ici pour récupérer l'uidcréé précédemment
Récupérer la valeur d'un champ d'une autre couche en correspondance
- On utilise
get_featurequi permet de récupérer un objet d'une autre couche en faisant la correspondance avec la valeur d'un champ de la couche - on utilise
attributesqui permet de récupérer les valeurs de tous les champs - on utilise
['uid']pour récupérer la valeur du champuid1 2 3 4 5 6 7 8 9 10
attributes( get_feature( -- nom de la couche où chercher la donnée 'especes', -- nom du champ dans la couche ou chercher la donnée 'nom_scientifique', -- nom du champ dans la couche "fille", ici les observations "espece_support" ) )['uid']
-
On a bien l'
uidde l'espèce ajouté dans le champid_espece
-
On peut supprimer le champ
espece_supportqui ne servira plus
Récupérer automatiquement la commune de chaque observation#
Les expressions permettent de gérer les données en relation spatiale : on va récupérer le code INSEE de la commune de chaque observation, par intersection entre leurs géométries.
- Avec la calculatrice de champs on crée un nouveau champ
code_inseede typeTexteavec une expression de relation par intersection :
Récupérer le code de la commune en intersection
overlay_intersectsest une méthode efficace pour cela. Elle renvoie un tableau. On peut donc récupérer le premier élément via le[0].1 2 3 4 5
overlay_intersects( layer:='communes', expression:="code_commune", limit:=1 )[0]
- On obtient bien le nouveau champ
code_inseedans la table
Créer des relations entre les observations, les communes et les espèces#
Dans les propriétés du projet QGIS, onglet Relations, créer
- Une relation entre les
observations(champcode_insee) et lesCOMMUNE(champINSEE_COM) - Une relation entre les
observations(champid_espece) et lesespeces(champuid)

Visualiser via la table attributaire les données en relation#
- Ouvrir la table attributaire des
especes - Passer en vue "Formulaire" via le petit bouton en bas à droite du tableau
- Sélectionner une commune et voir les données d'observations liées
