Travailler avec la table d’attributs¶
La table d’attributs affiche des informations sur les entités d’un calque sélectionné. Chaque ligne du tableau représente une entité (avec ou sans géométrie) et chaque colonne contient une information particulière sur cette entité. Les entités du tableau peuvent être recherchées, sélectionnées, déplacées ou même modifiées.
Avant-propos : Tables spatiale et non spatiale¶
QGIS vous permet de charger des couches spatiales et non spatiales. Ceci inclut actuellement les tables supportées par OGR et les fichiers de texte délimité, ainsi que les fournisseurs PostgreSQL, MSSQL, SpatiaLite, DB2 et Oracle. Toutes les couches chargées sont listées dans le panneau Couches. Le fait qu’une couche soit spatiale ou non détermine si vous pouvez interagir avec elle sur la carte.
Les tables non spatiales peuvent être parcourues et modifiées à l’aide de la vue de la table d’attributs. De plus, elles peuvent être utilisées pour des requêtes sur les champs. Par exemple, vous pouvez utiliser les colonnes d’une table non spatiale pour définir des valeurs d’attributs, ou une plage de valeurs qui peut être ajoutées à une couche vectorielle spécifique pendant la numérisation. Regardez le widget d’édition dans la section Propriétés du formulaire d’attributs pour en savoir plus.
Présentation de l’interface de la table d’attributs¶
Pour ouvrir la table attributaire d’une couche vectoriel, activez la couche en cliquant dessus depuis la Le panneau Couches. Puis dans le menu , cliquez sur . Vous pouvez aussi y accéder avec un clic droit sur la couche puis en sélectionnant
ou en cliquant sur le bouton
dans la barre d’outils des Attributs. Si vous préférez les raccourcis, F6 ouvrira la table d’attributs. Shift+F6 ouvrira la table d’attributs filtrée vers les entités sélectionnées et Ctrl+F6 ouvrira la table d’attributs filtrée vers les entités visibles.
Cela ouvrira une nouvelle fenêtre qui affiche les attributs de toutes les entités de la couche (voir figure_attributes_table). Selon le paramétrage effectué dans le menu , la fenêtre s’ouvrira en mode ancré ou pas. Le nombre total des entités et le nombre d’entités sélectionnées ou filtrés sont affichés dans la barre de titre de la table d’attributs. De même, si un filtrage spatial est appliqué à la table, cette information y figure.

Table d’attributs de la couche “regions”¶
Les boutons situés au-dessus de la table d’attributs apportent les fonctionnalités suivantes :
Icône |
Étiquette |
Fonction |
Raccourci par Défaut |
---|---|---|---|
Basculer en mode édition |
Activer les fonctions d’édition |
Ctrl+E |
|
Basculer en mode édition multiple |
Mettre à jour plusieurs champs de plusieurs entités |
||
Enregistrer les modifications |
Enregistrer les modifications en cours |
Ctrl+S |
|
Recharger la table |
|||
Ajouter une entité |
Ajouter une entité non géométrique |
||
Supprimer les entités sélectionnées |
Supprimer les entités sélectionnées de la couche |
||
Couper les entités sélectionnées dans le presse-papiers |
Ctrl+X |
||
Copier les entités sélectionnées dans le presse-papiers |
Ctrl+C |
||
Coller les entités à partir du presse-papier |
Insérer de nouvelles entités à partir de celles qui ont été copiées |
Ctrl+V |
|
Sélectionner les entités en utilisant une expression |
|||
Tout sélectionner |
Sélectionner toutes les entités de la couche |
Ctrl+A |
|
Inverser la sélection |
Inverser la sélection en cours dans la couche |
Ctrl+R |
|
Tout désélectionner |
Désélectionner toutes les entités de la couche courante |
Ctrl+Shift+A |
|
Filtrer/Sélectionner les entités en utilisant le formulaire |
Ctrl+F |
||
Déplacer la sélection au sommet |
Regrouper les objets sélectionnés au début de la table |
||
Centrer la carte sur les lignes sélectionnées |
Ctrl+P |
||
Zoomer la carte sur les lignes sélectionnées |
Ctrl+J |
||
Nouveau champ |
Ajouter un nouveau champ à la source de données |
Ctrl+W |
|
Supprimer le champ |
Supprimer un champ de la source de données |
Ctrl+L |
|
Ouvrir la calculatrice de champ |
Mise à jour de champs pour de nombreuses entités. |
Ctrl+I |
|
Mise en forme conditionnelle |
Active la mise en forme de la table |
||
Intégrer la table attributaire |
Permet d’intégrer ou de décrocher la table attributaire |
||
Actions |
Lister les actions liées à la couche |
Table d’attributs 1 : Les outils disponibles
Note
Selon le format des données et la version de la bibliothèque OGR compilée avec votre version de QGIS, certains outils pourraient manquer.
Sous ces boutons se trouve la barre de Calcul rapide (activée seulement en mode d’édition), qui permet d’appliquer rapidement des calculs à tout ou partie des entités de la couche. Cette barre utilise les mêmes expressions que dans la Calculateur de champ (voir Editer les valeurs attributaires).
Vue en table vs vue formulaire¶
QGIS propose deux modes pour manipuler facilement les données dans la table attributaire :
La
Vue table montre les valeurs des différentes entités en mode tabulaire, chaque ligne représentant une entité et chaque colonne un champ.
Et le
Mode formulaire montre les identifiants de l’entité dans le premier panneau et ne présente que les attributs de l’identifiant cliqué dans le second panneau. Le mode formulaire utilise la configuration des champs de la couche (voir Propriétés du formulaire d’attributs).
Vous pouvez basculer d’un mode à l’autre en cliquant sur l’icône correspondante en bas à droite de la boîte de dialogue.
Vous pouvez aussi préciser le mode de vue par défaut à l’ouverture de la table attributaire dans le menu . Cela peut être “Se souvenir de la dernière vue”, “Voir la table” or “Voir le formulaire”.

Table attributaire en mode Table (en haut) vs en mode Formulaire (en bas)¶
Configurer les colonnes¶
Un clic droit sur l’en-tête de colonne en mode Table donne accès aux outils permettant de configurer ce qui peut être présenté dans la table attributaire et comment.
Cacher et organiser des colonnes et activer des actions¶
En faisant un clic droit dans l’en-tête d’une colonne, vous pouvez choisir de la masquer de la table attributaire. Pour changer masquer ou afficher plusieurs colonnes en même temps ou bien changer l’ordre des colonnes, choisissez Organiser les colonnes …. Dans la nouvelle boîte de dialogue, vous pouvez :
cocher ou décocher les colonnes que vous souhaitez afficher ou masquer
glisser-et-déposer des éléments pour réorganiser les colonnes dans la table attributaire. Notez que ce changement n’affecte que le rendu de la table et ne modifier pas l’ordre des champs dans la source de données de la couche
activer une nouvelle colonne virtuelle d” Actions qui présente à chaque rang un bouton de menu déourlant ou un bouton de liste d’action, voir les Propriétés des Actions pour plus d’information sur les actions.
Paramétrer la largeur des colonnes¶
La largeur des colonnes peut être réglée par un clic droit sur l’en-tête de la colonne, puis en sélectionnant soit :
largeur… pour saisir la valeur souhaitée. Par défaut, c’est la valeur actuelle qui est présentée dans l’outil
Taille automatique pour redimensionner la taille à la meilleure largeur.
La largeur de la colonne peut aussi être modifiée en glissant la limite de droite de l’en-tête de colonne. La nouvelle dimension de la colonne est maintenue dans la couche, et restaurée à l’ouverture suivante de la table d’attributs.
Trier les colonnes¶
La table peut être triée par n’importe quelle colonne, en cliquant sur l’en-tête de colonne. Une petite flèche indique le sens du tri (si la flèche pointe vers le bas, cela signifie que les valeurs sont triées par ordre décroissant depuis le haut, si la flèche pointe vers le haut, cela signifie que les valeurs sont triées par ordre décroissant depuis le haut). Vous pouvez aussi choisir de trier les colonnes avec l’option tri du menu contextuel de l’en-tête de colonne et en écrivant une expression, par exemple pour trier les rangs de plusieurs colonnes, vous pouvez écrire concat(col0, col1)
.
En mode formulaire, les identifiants d’entités peuvent être triés grâce à l’option :guilabel:`Définir l’ordre `.
Astuce
Trier des colonnes de différents types
Trier une table attributaire en fonction de colonnes de type numérique et texte risque de causer des résultats inattendus à cause de l’expression concat("USE", "ID")
qui renvoie des valeurs en chaînes de caractères (par ex., 'Borough105' < 'Borough6'
). Vous pouvez contourner le problème en utilisant par exemple concat("USE", lpad("ID", 3, 0))
qui renvoie 'Borough105' > 'Borough006'
.
Mise en forme conditionnelle de la table¶
Les paramètres de mise en forme conditionnelle peuvent être utilisés pour mettre en surbrillance des entités de la table attributaire que vous souhaitez montrer, en utilisant des conditions sur les éléments des entités :
les géométries (par exemple en identifiant les entités multi-parties, celles de petites dimensions ou dans une étendue définie de la carte…) ;
la valeur du champ (par exemple en comparant les valeurs à un seuil, en identifiant les cellules vides…).
Vous pouvez activer le panneau de mise en forme conditionnelle en cliquant sur en haut à droite de la fenêtre de la table des attributs en mode Table (n’est pas accessible en mode formulaire).
Le nouveau panneau permet à l’utilisateur d’ajouter de nouvelles règles pour le rendu de format d’un Champ ou d’une
Ligne complète. L’ajout d’une nouvelle règle ouvre un formulaire pour définir :
le nom de la règle ;
une condition utilisant n’importe laquelle des fonctions du calculateur d’expression <vector_expressions> ;
la mise en forme : elle peut être choisie dans une liste de formats prédéfinis ou créée selon des propriétés comme :
couleurs d’arrière-plan et du texte;
utilisation d’une Icône;
texte en gras, italique, souligné ou barré;
police.

Mise en forme conditionnelle des cellules de la table d’attributs¶
Interagir avec les entités dans une table attributaire¶
Sélectionner des entités¶
En mode table, chaque ligne de la table attributaire présente les attributs d’une seule entité de la couche. En sélectionnant une ligne, vous sélectionnez une entité et, de la même manière, en sélectionnant une entité dans le canevas de la carte (dans le cas d’une couche à géométries activées), vous sélectionnez la ligne dans la table attributaire. Si le jeu d’entités sélectionnées dans le canevas de la carte (ou dans la table attributaire) est modifié, alors la sélection est aussi mise à jour dans la table attributaire (ou le canevas de la carte).
Les lignes peuvent être sélectionnées en cliquant sur le numéro de ligne placé tout à gauche. Plusieurs lignes peuvent être sélectionnées en maintenant la touche Ctrl. Une sélection continue s’effectue en gardant appuyée la touche Shift et en cliquant sur une nouvelle ligne, toutes les lignes entre la première sélection et la dernière seront sélectionnées. Déplacer la position du curseur dans la table d’attributs en cliquant sur une cellule ne modifie pas la sélection des lignes. Modifier les entités sélectionnées depuis la carte ne modifie pas la position du curseur dans la table.
En mode formulaire de la table attributaire, les entités sont identifiées par défaut dans le panneau de gauche par la valeur du champ montré (voir Propriétés des Infobulles). Cet identifiant peut être remplacé en utilisant le menu déroulant en haut du panneau, soit en sélectionnant un champ existant soit en utilisant une expression personnalisée. Vous pouvez aussi choisir de trier la liste des entités depuis le menu déroulant.
Cliquer sur une valeur du panneau de gauche pour afficher les attributs de l’entité dans celui de droite. Pour sélectionner une entité, vous devez cliquer dans le symbole carré situé à gauche de l’identifiant. Par défaut, le symbole prend une couleur jaune. Comme dans la vue en mode table, vous pouvez sélectionner plusieurs entités en utilisant les raccourcis clavier présentés ci-dessus.
En plus de sélectionner les entités avec la souris, vous pouvez créer des sélections automatiques à partir des attributs des entités en vous servant des outils disponibles dans la table attributaire, comme (voir la section Automatic selection et la suivante pour plus d’information et l’utilisation) :
Il est aussi possible de sélectionner les entités à partir des formulaires de sélection Filtrer et sélectionner des entités à partir des formulaires.
Filtrer les entités¶
Une fois vos entités sélectionnées dans la table attributaire, vous pouvez choisir de n’afficher que celles-ci dans la table. Ceci peut être fait aisément grâce à l’élément Ne montrer que les entités sélectionnées dans le menu déroulant en bas à gauche de la boîte de dialogue. Cette liste offre les filtres suivants :
:guilabel:` Montrer toutes les entités`
:guilabel:` Ne montrer que les entités sélectionnées`
:guilabel:` Ne montrer que les entités visibles sur la carte`
:guilabel:` Ne montrer que les entités nouvelles ou éditées`
Filtre de champ - permet à l’utilisateur de filtrer selon une valeur contenant dans un champ : choisissez une colonne dans la liste, saisissez la valeur et appuyez sur Entrée pour filtrer. Ainsi, seules les entités correspondantes seront montrées dans la table attributaire.
Filtre avancé (Expression) - Ouvre la boîte de dialogue du calculateur d’expression. Dans celle-ci, vous pouvez créer des expressions complexes pour correspondre aux lignes de la table. Par exemple, vous pouvez filtrer en utilisant plus d’un champ. Lorsqu’elle est appliquée, l’expression de filtre est affichée en bas de la boîte de dialogue.
Il est aussi possible de filtrer les entités à partir de formulaires.
Note
Le fait de filtrer des enregistrements à partir de la table d’attributs ne filtre pas les entités sur la couche ; elles sont simplement momentanément cachées de la table et on peut y accéder via le canevas de la carte ou en retirant le filtre. Pour des filtres qui cachent bien les entités de la couche, utiliser le Constructeur de requête.
Astuce
**Mise à jour des filtres de la source de données avec **Ne montrer que les entités visibles sur la carte
Lorsque pour des raisons de performance, les entités montrées dans la table attributaires sont limitées spatialement à l’étendue du canevas de la carte à l’ouverture (voir les Options de sources de données pour la marche à suivre), choisir Ne montrer que les entités visibles sur la carte sur une nouvelle étendue du canevas de la carte met à jour la restriction spatiale.
Filtrer et sélectionner des entités à partir des formulaires¶
En cliquant sur Sélectionner/Filtrer les entités en utilisant le formulaire ou en tapant Ctrl+F vous faites passer la boite de dialogue de la table attribuaire du mode table au mode formulaire et remplacez chaque widget avec sa variante de recherche.
A partir de ce point, les fonctionnalités de cet outils sont similaires à celles décrites dans Sélectionner des entités selon les valeurs, où vous trouverez la description de tous les opérateurs et modes de sélection.

Table attributaire filtrée par le formulaire¶
Lorsque vous filtrez/sélectionnez des entités de la table attributaire, il y a un bouton Filtrer les entités qui permet de définir et d’affiner les entités. Son utilisation active l’option Filtre avancé (Expression) et affiche l’expression du filtre correspondant dans un menu de texte éditable en bas du formulaire.
S’il y a déjà des entités filtrées, vous pouvez affiner le filtre avec le menu déroulant situé à côté du bouton Filtrer les entités button. Les options sont :
Filtre incluant (« AND »)
Filtre exclusif (« OR »)
Pour effacer le filtre, vous pouvez soit sélectionner l’option Montrer toutes les entités du menu déroulant en bas à gauche, soit effacer l’expression et cliquer sur Appliquer ou appuyer sur Entrée.
Actions applicables aux entités¶
Les utilisateurs ont plusieurs choix pour manipuler les entités dans le menu contextuel comme par exemple :
Sélectionner tout (Ctrl+A) : sélectionne toute les entités
Copier le contenu d’une cellule dans le presse-papier avec Copier le contenu de la cellule;
Zoomer sur l’entité sans avoir à la sélectionner au préalable ;
Se déplacer sur l’entité sans avoir à la sélectionner au préalable ;
Faire clignoter l’entité, pour la mettre en surbrillance dans le canevas de carte ;
Ouvrir le formulaire : cela transforme la table attributaire en mode formulaire avec un focus sur l’entité sélectionnée.

Bouton Copier le contenu de la cellule¶
Si vous souhaitez utiliser des données attributaires de programmes externes (comme Excel, LibreOffice, QGIS ou une application web), sélectionnez une ou plusieurs ligne(s) et utilisez le bouton Copiez les lignes sélectionnées dans le presse-papier ou appuyez sur Ctrl+C.
Dans le menu Copier les entités comme :
vous pouvez définir le format pour coller avec la liste déroulanteTexte simple, pas de géométrie,
Texte simple, géométrie WKT,
GeoJSON
Vous pouvez aussi afficher une liste d’actions dans le menu contextuel. Ceci est activé dans l’onglet Propriétés des Actions pour plus d’informations sur les actions.
. VoirEnregistrer les entités sélectionnées en tant que nouvelle couche¶
Les entités sélectionnées peuvent être enregistrés comme n’importe quel format de vecteur supporté par OGR et aussi transformées dans un autre système de coordonnées de référence (SCR). Dans les propriétés de la couche, depuis le panneau Couches, cliquez sur pour définir le nom du jeu de données en sortie, son format et son SCR (voir la section Creating new layers from an existing layer). Vous noterez que la boîte est cochée.
Editer les valeurs d’attributs¶
L’édition des valeurs attributaires peut être faite en :
saisissant directement la nouvelle valeur dans la cellule, que la table attributaire soit en mode table ou en mode formulaire. Les modifications sont ainsi faites cellule par cellule, entité par entité ;
utilisant la calculatrice de champs : pour mettre à jour dans une ligne un champ déjà existnat ou un champ à créer mais pour plusieurs entités. Cela peut être utilisé pour créer des champs virtuels ;
utilisant barre de calcul rapide de champ : comme ci-dessus mais uniquement pour un champ existant ;
ou en utilisant le mode édition multiple : pour mettre à jour dans une ligne plusieurs champs pour plusieurs entités.
Utiliser la Calculatrice de Champs¶
Le bouton Calculatrice de champ de la table attributaire vous permet de réaliser des calculs à partir de valeurs attributaires existantes ou de fonctions définies, comme par exemple pour calculer la longueur ou la surface d’entités géométriques. Les résultats peuvent être utilisés pour mettre à jour un champ existant ou écrites dans un nouveau champ (qui peut être un champ virtuel ).
La calculatrice de champ fonctionne avec toutes les couches qui gèrent le mode édition. Lorsque vous cliquez sur le bouton de la calculatrice de champ, la fenêtre s’ouvre (voir figure_field_calculator). Si la couche n’est pas en mode édition, un avertissement s’affiche et l’utilisation de la calculatrice de champ basculera automatiquement la couche en édition avant d’effectuer le calcul.
Basée sur la boîte de dialogue Constructeur de requêtes , la boîte de dialogue de la calculatrice de champ offre une interface complète pour définir une expression et l’appliquer à un champ existant ou à un champ nouvellement créé. Pour utiliser la boîte de dialogue de la calculatrice de champ, vous devez choisir si vous voulez :
appliquer le calcul à la totalité de la couche ou seulement à des entités sélectionnées
créer un nouveau champ pour le calcul ou mettre à jour un champ existant.

Calculatrice de champ¶
Si vous choisissez d’ajouter un nouveau champ, vous devez saisir un nom de champ, un type de champ (entier, réel, date ou texte) et si nécessaire, la longueur totale du champ et la précision du champ. Par exemple, si vous choisissez une longueur de champ de 10 et une précision de champ de 3, cela veut dire que vous avez 7 chiffres avant la virgule et 3 chiffres pour la partie décimale.
L’exemple suivant montre comment la calculatrice de champs fonctionne. Il s’agit de calculer la longueur en km de la couche railroads
issue de l’échantillon de données QGIS.
Chargez le fichier shapefile
railroads.shp
dans QGIS et ouvrez saTable d’Attributs.
Cliquez sur
Basculer en mode édition et ouvrez la
Calculatrice de champs.
Cochez la case
Créer un nouveau champ pour enregistrer le résultat des calculs dans un nouveau champ.
Saisir
length_km
comme NomSélectionner
Nombre décimal (réel)
pour le TypeChoisir la Longueur du champ à
10
et la Précision à3
Double cliquer sur
$length
dans le groupe Géométrie pour ajouter la longueur de la géométrie dans la boîte d’expression de la Calculatrice de champ.Compléter l’expression en saisissant
/ 1000
dans la boîte d’expression de la Calculatrice de champ et cliquer sur OK.Vous avez maintenant un nouveau champ length_km dans la table attributaire.
Créer un Champ virtuel¶
Un champ virtuel est un champ basé sur une expression calculée à la volée, ce qui signifie que sa valeur est mise à jour automatiquement dès que les paramètres sous-jacents sont modifiés. Cette expression est mise en place une seule fois ; vous n’avez pas besoin de recalculer le champ à chaque fois que les valeurs nécessaires au calcul changent. Vous pouvez par exemple utiliser un champ virtuel si vous souhaitez connaître la surface lorsque vous numérisez des entités ou si vous souhaitez calculer automatiquement une durée entre des dates qui peuvent changer (avec la fonction now()
).
Note
Utilisation des Champs Virtuels
Les champs virtuels ne sont pas des attributs permanents, ils ne sont sauvegardés et disponibles que dans le projet dans lequel ils ont été créés.
Un champ est défini comme virtuel uniquement à sa création et l’expression utilisée pour le générer ne peut pas être modifiée par la suite : pour le faire, vous devez supprimer et recréer le champ.
Utiliser la Barre de Calcul rapide de champ¶
Alors que la Calculatrice de champ est toujours disponible, la barre de calcul rapide de champ en haut de la table attributaire n’est visible que lorsque la couche est en mode édition. Grâce au moteur d’expression, elle permet d’éditer plus rapidement un champ existant :
Sélectionner le champ à mettre à jour dans le menu déroulant.
Remplir la fenêtre de texte avec une valeur, que ce soit une expression saisie à la main ou en la construisant grâce au bouton expression
.
Cliquer sur le bouton Tout mettre à jour, Mettre à jour la sélection ou Mise à jour filtrée selon vos besoins.

Barre de Calcul rapide de champ¶
Éditer plusieurs champs¶
Contrairement aux outils précédents, le mode d’édition multiple permet d’éditer simultanément plusieurs champs de plusieurs entités. Une fois la couche basculée en mode édition, les options d’édition multiple sont accessibles:
avec le bouton
Basculer en mode d’édition multiple de la barre d’outils dans la boîte de dialogue de la table d’attributs ;
Note
Contrairement à l’outil de la table d’attributs, choisir l’option :Éditer –> Modifier les attributs des entités sélectionnées vous fournit un dialogue pour remplir les changements d’attributs. Cela nécessite que les entités soient sélectionnées avant de l’activer.
Afin de modifier d’une traite plusieurs champs:
Sélectionnez les entités que vous souhaitez éditer.
Dans la barre d’outils de la table d’attributs, cliquer sur le bouton
. Ceci basculera la boîte en forme formulaire. La sélection des entités peut aussi être réalisée à cette étape.
Les champs (et valeurs) des entités sélectionnées sont montrées à droite de la table attributaire. De nouveaux outils sont apparus à côté de chaque champ pour afficher l’état en cours de l’édition multiple :
Le champ contient des valeurs différentes pour les entités sélectionnées. Il est montré vide et chaque entité va conserver sa valeur d’origine. Vous pouvez modifier la valeur du champ à partir du menu déroulant de l’outil.
Toutes les entités sélectionnées ont la même valeur pour ce champ et la valeur montrée dans le formulaire sera conservée.
Le champ a été modifié et la valeur saisie sera appliquée à toutes les entités sélectionnées. Un message apparaîtra en haut de la boîte de dialogue pour vous inviter à appliquer ou alors à annuler la modification.
En cliquant sur n’importe lequel de ces outils, vous pouvez soit régler la valeur courante pour le champ, soit revenir à sa valeur originelle, ce qui veut dire que vous pouvez revenir en arrière champ par champ.
Mettre à jour des champs de plusieurs entités¶
Faites les changements aux champs que vous souhaitez modifier.
Cliquer sur Appliquer les modifications dans le message en haut ou sur n’importe quelle entité du panneau de gauche.
Les modifications seront appliquées à toutes les entités sélectionnées. Si aucune entité n’est sélectionnée, c’est toute la table qui est mise à jour. Les modifications sont réalisées en une seule fois. Ainsi en cliquant sur Annuler, vous pouvez revenir aux modifications d’attributs pour toutes les entités sélectionnées en une seule fois.
Note
Le mode d’édition multiple n’est disponible que pour les formulaires auto-générés ou en conception par glisser/déposer (voir Personnaliser un formulaire pour vos données); il n’est pas disponible pour les formulaires par fichiers ui personnalisés.
Créer des relations un ou plusieurs à plusieurs¶
Utiliser des relations est courant dans les bases de données. L’idée est que des entités (lignes) de différentes couches (tables) peuvent être liées les unes aux autres.
Introduction sur les relations de 1 à n¶
Comme exemple, nous prendrons une couche contenant toutes les régions de l’Alaska (des polygones) qui fournit quelques attributs sur le nom, le type de région et un identifiant unique (qui jouera le rôle de clé primaire).
Nous prenons ensuite une autre couche de point ou une table contenant des informations sur les aéroports localisés dans les régions. Si vous souhaitez accéder, depuis la couche des régions, vous devez créer une relation “un à plusieurs”, en utilisant des clés étrangères, car il y a plusieurs aéroports dans la plupart des régions.

Les régions d’Alaska contenant des aéroports¶
Couches dans les relations de 1 à n¶
QGIS ne fait pas la distinction entre une table et une couche vecteur. Très simplement, une couche vecteur est une table associée à une géométrie. Ce qui signifie que vous pouvez ajouter votre table comme une couche vecteur. Pour démontrer la relation de 1 à n, vous pouvez ajouter le shapefile regions
et le shapefile airports
qui a un champ de clé étrangère (fk_region
) vers la couche « régions ». Cela signifie que chaque aéroport appartient à une seule région alors que chaque région peut avoir un nombre variable d’aéroports (une relation 1 à plusieurs typique).
Clés étrangères dans les relations de 1 à n¶
En plus des attributs existants dans la table des aéroports, un autre champ, fk_region
, va jouer le rôle de clé étrangère (si la table est stockée dans une base de données, vous allez sans doute définir une contrainte sur ce champ).
Ce champ fk_region contiendra toujours un identifiant de région. Il peut être vu comme un pointeur vers la région à laquelle l’aéroport appartient. Et vous pouvez créer un formulaire personnalisé d’édition pour la saisie. Cela fonctionne avec différents fournisseurs (vous pouvez vous en servir également avec des shapefiles ou des fichiers csv) et la seule chose que vous avez à faire est de dire à QGIS qu’il y a une relation entre les tables.
Définir les relations de 1 à n (Manager de relations)¶
La première chose que nous allons faire est de dire à QGIS qu’il y a une relation entre nos couches. Cela se fait dans le menu Relations et cliquez sur Ajouter une relation.
. Allez dans l’ongletNom sera utilisé comme titre. Il s’agit d’un texte lisible décrivant la relation. Ici, nous allons simplement mettre Aéroports.
Couche de référence (parent), aussi considérée comme couche parent, est la couche contenant la clé primaire. Ici il s’agit de la couche des régions.
Champ de référence est le champ contenant la clé primaire dans la couche de référence, le champ
ID
dans notre cas.Couche référençante (enfant) aussi considérée comme la couche enfant, est la couche contenant la clé étrangère. Dans notre cas il s’agit de la couche des aéroports.
Champ référençant correspond au champ qui pointe vers l’autre couche, le champ
fk_region
dans notre cas.Id sera utilisée pour des besoins internes et doit être unique. Vous pourriez en avoir besoin pour créer des :ref:` formulaires d’édition personnalisés<customize_form>`. Si vous laissez ce champ vide, un numéro sera généré automatiquement mais vous pouvez en assigner un si vous le souhaitez.
**La force de la relation ** établit la force de la relation entre la couche parent et la couche enfant. Le type par défaut Association signifie que la couche parent est simplement liée à la couche enfant alors que le type Composition vous permet de dupliquer les entités de la couche enfant lorsque vous dupliquez celles de la couche parent.

Gestionnaire de Relations¶
Formulaires pour les relations de 1 à n¶
Maintenant que QGIS a bien généré la relation, le formulaire d’édition va être amélioré. Nous n’avons pas modifié le formulaire d’édition par défaut (généré automatiquement), une nouvelle zone va simplement être ajoutée au formulaire. Sélectionnez la couche de régions dans la légende et utilisez l’outil d’identification. Selon vos préférences, le formulaire s’ouvre directement ou vous devez le faire via la zone d’identification qui s’affiche.

Formulaire de la couche des régions affichant la relation avec les aéroports¶
Comme vous pouvez le voir, les aéroports liés à cette région en particulier sont tous visibles dans la table. Il y a également quelques boutons disponibles ; passons-les en revue rapidement :
Le bouton
permet de passer en mode édition. Soyez conscients qu’il active le mode édition de la couche des aéroports bien qu’il soit situé dans le formulaire de la couche des régions. La table affiche bien les entités de la couche des aéroports.
Le bouton
ajoutera un nouvel enregistrement dans la table attributaire de la couche d’aéroport. Il assignera également par défaut le nouvel aéroport à la région courante.
Le bouton
vous permet de copier une ou plusieurs entités enfant.
Le bouton
supprime l’aéroport séléctionné de manière permanente.
Le bouton
ouvre une nouvelle fenêtre où vous pouvez sélectionner des aéroports existants et qui seront ensuite attribués à la région identifiée. Ceci est pratique lorsque vous assignez par erreur la mauvaise région à un aéroport.
Le bouton
permet de supprimer le lien entre l’aéroport sélectionné et la région identifiée, le laissant non assigné (la clé étrangère devient alors NULL).
Avec le bouton
vous pouvez zoomer la carte sur les entités enfant sélectionnées.
Les deux boutons
et
à droite basculent entre le mode vue et le mode formulaire tandis que celui de droite vous permet de voir tous les aéroports dans leur forme respective.
Dans l’exemple ci-dessus, la couche référençante a des géométries (ce n’est pas seulement une table alphanumérique) ce qui implique que les étapes citées créeront une entrée dans la table d’attribut qui n’aura pas de géométrie correspondante. Pour ajouter une géométrie :
Sélectionner l’enregistrement ajouté précédemment dans le formulaire d’entité de la couche référençante.
Utiliser l’outil de numérisation
Ajouter une partie pour attacher une géométrie à l’entité sélectionnée dans la table attributaire.
Si vous travaillez dans la table d’attributs des aéroports, le widget Relation de référence sera automatiquement réglé sur le champ fk_region
(celui utilisée pour créer la relation); voir le Widget de Relation de référence.
Dans le formulaire des aéroports, vous voyez le bouton à droite du champ
fk_region
: si vous cliquez sur le bouton, le formulaire de la couche région s’ouvrira. Ce widget vous permet d’ouvrir et modifier rapidement les formulaires des entités parent liées.

Formulaire d’identification d’un aéroport et de sa région associée¶
Le widget de Relation de référence a également une option pour incruster le formulaire de la couche parent dans celui de la couche enfant. Il est disponible depuis le menu fk_region
et cocher l’option Montrer le formulaire incrusté
Vous devriez ainsi voir que le formulaire de la région est inclus dans celui d’un aéroport et il vous permet de modifier la région assignée à l’aéroport.

De plus, si vous basculez en mode édition dans la couche d’aéroport, le champ fk_region
a aussi une fonction d’autocomplétion : lorsque vous tapez, vous voyez toutes les valeurs du champ id
de la couche de la région.
Introduction aux relations plusieurs-à-plusieurs (n à n)¶
Les relations de n à n sont des relations de plusieurs à plusieurs entre deux tables. Par exemple, les couches airports
et airlines
: un aéroport reçoit plusieurs compagnies aériennes et une compagnie aérienne utilise plusieurs aéroports.
Ce code SQL crée les trois tables dont nous avons besoin pour une relation de n à n dans un schéma PostgreSQL/PostGIS nommé locations. Vous pouvez lancer le code en utilisant pgAdmin. La table des aéroports stocke la couche airports
et la table des lignes aériennes stocke la couche airlines
. Dans les deux tables, il y a peu de champs pour simplifier. La partie délicate est la table airports_airlines
. Il faut qu’elle compile toutes les lignes aériennes pour tous les aéroports (et vice versa). Ce genre de table s’appelle une table pivot. Les contraintes de cette table ne rendent possible l’association d’un aéroport avec une ligne que si les deux existent déjà dans leurs couches.
CREATE SCHEMA locations;
CREATE TABLE locations.airports
(
id serial NOT NULL,
geom geometry(Point, 4326) NOT NULL,
airport_name text NOT NULL,
CONSTRAINT airports_pkey PRIMARY KEY (id)
);
CREATE INDEX airports_geom_idx ON locations.airports USING gist (geom);
CREATE TABLE locations.airlines
(
id serial NOT NULL,
geom geometry(Point, 4326) NOT NULL,
airline_name text NOT NULL,
CONSTRAINT airlines_pkey PRIMARY KEY (id)
);
CREATE INDEX airlines_geom_idx ON locations.airlines USING gist (geom);
CREATE TABLE locations.airports_airlines
(
id serial NOT NULL,
airport_fk integer NOT NULL,
airline_fk integer NOT NULL,
CONSTRAINT airports_airlines_pkey PRIMARY KEY (id),
CONSTRAINT airports_airlines_airport_fk_fkey FOREIGN KEY (airport_fk)
REFERENCES locations.airports (id)
ON DELETE CASCADE
ON UPDATE CASCADE
DEFERRABLE INITIALLY DEFERRED,
CONSTRAINT airports_airlines_airline_fk_fkey FOREIGN KEY (airline_fk)
REFERENCES locations.airlines (id)
ON DELETE CASCADE
ON UPDATE CASCADE
DEFERRABLE INITIALLY DEFERRED
);
Au lieu de PostgreSQL, vous pouvez utiliser GeoPackage. Dans ce cas, les trois tables sont créées manuellement avec le menu
. Dans GeoPackage, il n’y a pas de schémas, donc le préfixe locations n’est pas requis.Les contraintes de clé étrangère dans la table airports_airlines
table ne peuvent être créées en utilisant ou . Elles doivent donc être créées en sélectionnant . GeoPackage n’accepte pas les déclarations ADD CONSTRAINT ce qui fait que la table airports_airlines
doit être créée en deux étapes :
Créer la table avec seulement le champ
id
en utilisantAvec
, copier et exécuter ce code SQL :ALTER TABLE airports_airlines ADD COLUMN airport_fk INTEGER REFERENCES airports (id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED; ALTER TABLE airports_airlines ADD COLUMN airline_fk INTEGER REFERENCES airlines (id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
Puis dans QGIS, vous devez établie deux relations de 1 à n comme expliqué au-dessus :
une relation entre la table
airlines
et la table pivot ;et une seconde entre la table
airports
et la table pivot.
Une façon plus simple de faire cela (seulement pour PostgreSQL) est d’utiliser le Découvrir des relations dans . QGIS lit automatiquement toutes les relations de votre base de données et vous n’avez qu’à sélectionner les deux dont vous avez besoin. Pensez à charger les trois tables dans le projet QGIS d’abord.

Relations et découverte automatique¶
Si vous souhaitez supprimer un airport
ou une airline
, QGIS ne supprimera pas la ou les entité(s) associée(s) dans la table airports_airlines
. Cette tâche sera effectuée par la base de données si nous lui fournissons les bonnes contraintes lors de la création de la table pivot comme dans l’exemple actuel.
Note
Combiner des relations de n à n avec un groupe de transaction automatique
Vous devez activer le mode de transaction dans
quand vous travaillez dans de tels contextes. QGIS doit pouvoir ajouter ou mettre à jour un ou plusieurs champs dans toutes les tables (lignes aériennes, aéroports et les tables pivot).Enfin, il faut sélectionner la bonne cardinalité dans airports
et``airlines``. Pour le premier, nous devons choisir l’option airlines (id) et pour le second l’option airports (id).

Régler la relation de cardinalité¶
Vous pouvez maintenant associer un aéroport avec une ligne aérienne (ou une ligne aérienne avec un aéroport) en utilisant Ajouter une entité enfant ou Lier à une entité enfant existante dans les sous-formulaires. Un enregistrement sera automatiquement inséré dans la table airports_airlines
.

relation de n à n entre aéroports et lignes aériennes¶
Note
Utiliser la cardinalité Relation de n à 1
Il n’est parfois pas souhaitable de cacher la table pivot dans une relation de n à n. Principalement parce qu’il y a des attributs dans cette relation qui ne peuvent avoir de valeurs que lorsque la relation est établie. Si vos tables sont des couches (qui ont un champ géométrie), il peut être intéressant d’activer l’option Identification sur la carte ( ) pour les champs de clé étrangère dans la table pivot.
Note
Clé primaire de la table pivot
Évitez d’utiliser des champs multiples dans la clé primaire de la table pivot. QGIS attend une clé primaire unique donc une contrainte comme constraint airports_airlines_pkey primary key (airport_fk, airline_fk)
ne fonctionnera pas.