QGIS

Tout ce que vous avez toujours voulu savoir sur QGIS !

[Astuce] Réaliser une jointure attributaire entre des couches de données avec QGIS

« Est-il possible de joindre deux couches de données différentes ? »

Tout d’abord, voici la question qu’on m’a posé :
« J’ai une couche shape (avec des localisations de prospections sur le terrain) et j’ai un tableur avec des informations concernant ces prospections. Je veux joindre ces deux couches de données (shapefile et tableur) dans QGIS afin de me servir des informations contenues dans le tableur, dans ma couche SIG. Sachant que j’ai bien un attribut commun entre ces deux couches, est-ce possible, et si oui comment faire ? »

Allez, pas de suspens : la réponse est OUI ! Nous allons même voir ensemble comment faire, de façon simple. Pour avoir plus de détails sur les propriétés des couches, des jointures et autres réjouissances que vous permet le logiciel, je vous laisse vous délecter de la documentation officielle de QGIS !

Pour suivre cet exemple, vous aurez besoin d’un jeu de données vectorielles principal (par exemple un shapefile avec des localisations), d’un tableur avec des données, et évidemment de QGIS (j’utilise ici la version 3.2.1 Bonn). Attention : pour faire cette jointure entre deux couches, il faut absolument que les deux couches aient un champ en commun (même format, valeurs en commun…). On voit ça tout de suite.

 


Ajouts des données dans QGIS

Je vous présente mes données. J’ai un jeu de localisations d’espèces sous forme de points ; ces données sont dans un fichier SIG de type shapefile ouvert dans QGIS.

QGIS - Exemple d’un jeu de données vectorielles ponctuelles de répartition d’espèces, dans le canevas de carte sur un fond raster OSM, ainsi qu'une une couche de valeurs attributaires issues d’un tableur.

 

Concernant les attributs de cette couche, ils sont ici simplifiés pour mieux comprendre l’exemple. On a donc le champ id qui correspond à un identifiant unique (un chiffre différent par ligne) ; un attribut nommé taxon correspondant à un code identifiant une espèce (un code = une espèce) ; et enfin une date d’observation.

QGIS - Table attributaire du jeu de données vectorielles ponctuelles de répartition d’espèces utilisé dans cet exemple.

 

Enfin, j’ai également une couche de données sans géométrie, provenant d’un tableur (type excel par exemple). Concernant les attributs de cette couche, ils sont également simplifiés pour mieux comprendre l’exemple. On a ici un identifiant unique id (un chiffre différent par ligne) ; un attribut nommé taxon correspondant à un code identifiant une espèce (un code = une espèce) ; et enfin le nom de l’espèce (attribut lb_nom).

QGIS - Table attributaire du jeu de données contenu dans un tableur utilisé dans cet exemple.

 

Astuce

Et là vous vous demandez comment ouvrir un tableur de type excel dans qgis… Deux solutions.


La première solution consiste à enregistrer la feuille de votre tableur au format csv, puis d’ajouter une couche csv. J’explique toute la procédure dans cet article : importer des données dans QGIS depuis un tableur. Seule différence : lors de l’import il suffit de spécifier que la couche ne contient pas de géométrie.


Deuxième solution (que j’utilise) : comme cette couche n’a pas de géométrie, il n’y a pas besoin « d’expliquer » à QGIS qu’il faut lire et afficher des géométries. Alors la solution la plus rapide est d’ajouter cette couche en glisser-déposer. Si vous ne savez comment faire, lisez cet article : ajouter rapidement des couches dans QGIS.

Si vous me suivez toujours, vous aurez remarqué que mon tableur ne contient que 3 lignes. Ces trois lignes correspondent aux espèces que j’ai observé sur le terrain (pour l’exemple hein, Hawaï n’est que dans mes rêves...). J’ai donc contacté trois espèces, et tous les points d’observations sont dans l’autre couche, à savoir la couche SIG.

« Mais comment puis-je lier les noms d’espèces du tableur avec la couche SIG qui n’a que des codes ? » Avec une jointure sur ces fameux codes, pardi !

Je vous ai dit en introduction qu’il faut absolument un champ en commun pour faire une jointure. Ici, c’est l’attribut nommé taxon. (Remarque : ces attributs peuvent très bien avoir un nom différent.) En effet, ces deux champs sont de même format, et contiennent des valeurs en commun. Ce sont ces valeurs qui permettent de lier les deux couches.

Sans réfléchir, si je vous demande « quel est le nom de l’espèce qui a été observée pour les lignes 43, 44 et 45 ? », vous irez lire le code de dl'espèce dans la table attributaire de la couche SIG (c’est le 0001) puis vous irez lire le nom de l’espèce qui a pour code 0001 dans la couche de données provenant du tableur.

Maintenant, disons à QGIS de faire exactement la même chose !

 


La jointure attributaire

Pour rappel, nous voulons ici que les informations du tableur (les noms d’espèces) s’affichent dans la table attributaire de la couche vectorielle.

Ouvrez la fenêtre des propriétés de la couche des observations : sélectionnez la couche, faites un clic droit et cliquez sur Propriétés. La fenêtre « Propriété de la couche » s’ouvre. A gauche de cette fenêtre, sélectionnez l’onglet Jointures.

QGIS 3 – Fenêtre « Propriétés de la couche | Jointures » d’un exemple de jeu de données vectorielles ponctuelles.

 

Si aucune jointure n’existe, la fenêtre devrait être vide. Pour ajouter une nouvelle jointure, cliquez sur la croix verte en bas de la fenêtre. Une nouvelle fenêtre permettant de paramétrer une jointure s’ouvre alors.

QGIS 3 – Fenêtre d’ajout d’une nouvelle jointure.

 

Commençons par paramétrer la couche et les champs de jointure.

→ Sélectionnez la couche que voulez joindre dans la liste déroulante de la ligne Joindre la couche. Pour mon exemple, ma couche issue du tableur se nomme « Mes taxons ».

→ Sélectionnez le champ de la couche jointe sur lequel réaliser la jointure dans la liste déroulante Champ de jointure. Ici, c’est le champ clé de la couche des données du tableur, c'est-à-dire celui contenant les codes des espèces (le champ taxon).

→ Sélectionnez le champ sur lequel réaliser la jointure dans la liste déroulante de la ligne Champ dans la couche cible. Ici, c’est le champ clé de la couche de données SIG dont il est question (et pour mon exemple, ils portent le même nom -taxon- mais notez bien que ce n’est pas une obligation).

Attention : le champ clé dans la couche cible (la couche SIG ici) ne doit avoir qu’une seule correspondance dans la couche jointe (le tableur). Imaginez qu’il y ait plusieurs fois le code 0001 dans le tableur pour des espèces différentes. Comment pourriez-vous savoir de quelle espèce il s'agit pour les lignes ayant le code 0001 dans la couches SIG ? Même principe pour QGIS... et la jointure ne pourrait pas être faite correctement !

QGIS 3 – Fenêtre d’ajout d’une nouvelle jointure : paramétrage d’un jointure.

 

Vous pouvez ensuite définir d’autres paramètres : « mise en cache dans la mémoire virtuelle » et autres « jointure de table éditable ». Pour ce premier exemple on va faire simple : laissez les paramètres par défaut.

Vous pouvez cependant choisir les champs à joindre. Nous venons de paramétrer les champs clés des couches pour la jointure, c’est-à-dire les champs en commun entre les couches et qui permettent de les rapprocher ; vous pouvez ensuite ne choisir que certains champs à ajouter à votre couche SIG.

Pour cela, cochez Choisir les champs à joindre puis cocher les champs que vous voulez voir apparaître dans votre couche. Ici j’ai choisi d’ajouter seulement les noms des espèces.

QGIS 3 – Fenêtre d’ajout d’une nouvelle jointure : paramétrage d’un jointure.

 

Enfin, vous pouvez également choisir de Personnaliser le préfixe du nom du champ.

Je m’explique. Lors de la jointure, une ou plusieurs nouvelles colonnes vont être ajoutées à votre table attributaire (selon ce que vous avez défini). Pour vous permettre de reconnaître ces colonnes, QGIS leur donne un préfixe par défaut (il s’agit simplement du nom de la couche). Dans cet exemple, cela donne : Mes taxons_lb_nom, Mes taxons_ étant le préfixe du nom de la colonne lb_nom.

Vous pouvez choisir de changer ce préfixe par celui qui vous convient en cochant la case Personnaliser le préfixe du nom du champ, puis en écrivant votre propre préfixe. Vous pouvez également cocher la case et supprimer le préfixe par défaut sans le remplacer. Dans ce cas, vos nouvelles colonnes de jointure n’auront aucun préfixe, seulement le nom de la colonne d’origine.

QGIS 3 – Fenêtre d’ajout d’une nouvelle jointure : paramétrage d’un jointure.

 

Finalisez la définition de cette jointure et fermez la fenêtre en cliquant sur OK.

QGIS 3 – Fenêtre « Propriétés de la couche | Jointures » d’un exemple de jeu de données vectorielles ponctuelles, avec une jointure paramétrée.

 

Dans la fenêtre « Propriété de la couche », vous pouvez désormais voir le récapitulatif de la définition de la jointure qu’on vient de paramétrer. Si vous ne le voyez pas : soit vous n’avez pas enregistrer votre jointure en cliquant sur OK (oups... faut tout recommencer !), soit les informations ne sont pas affichées. Dans ce dernier cas, cliquez sur le petit triangle à côté du nom de la jointure.

Finalisez la jointure de couche et fermez la fenêtre en cliquant sur OK, puis regardons le résultat.

 


Quel est le résultat ?

Pour voir le résultat, ouvrez la table attributaire de la couche sur laquelle vous avez réalisé la jointure (la couche vectorielle dans cet exemple) : sélectionnez la couche des observations, faites un clic droit et cliquez sur Ouvrir la table d’attributs.

QGIS - Table attributaire du jeu de données vectorielles ponctuelles de répartition d’espèces utilisé dans cet exemple, avec une colonne supplémentaire issue d’une jointure.

 

Nous avons bien le résultat escompté !

Les trois premières colonnes sont toujours celles de la couche vectorielle, et toutes les colonnes à droite de celles-ci (bon, ici il n’y en a qu’une…) sont celles issues de la jointure. Ce sont donc les colonnes de l’autre couche de données. Vous remarquerez même le préfixe sur le nom de la colonne !

De plus, les champs clés ont bien joué leur rôle de liens : les données avec le code 0001 ont le bon nom d’espèce, ainsi que les données avec le code 0002, et ainsi de suite.

 

Je vais conclure avec quelques remarques importantes concernant cette couche avec jointure.

Les nouvelles colonnes issues de la jointure sont lues par QGIS, depuis une autre table attributaire que celle de leur couche d’origine. Ces données ne sont donc pas enregistrées dans votre couche SIG, elles sont seulement affichées dans la table attributaire.

Si vous souhaitez enregistrer ces données dans votre couche SIG, vous pouvez enregistrer une nouvelle couche vectorielle (sélectionnez la couche des observations, faites un clic droit et cliquez sur Enregistrer sous...). La nouvelle couche enregistrée aura toutes les colonnes dans sa table attributaire, y compris celles issues de la jointure.

Si vous modifiez des valeurs dans la couche jointe (les données du tableur), cela sera répercuté dans les colonnes issues de la jointure dans votre couche SIG. Et oui, comme je l’ai dit précédemment, ces valeurs sont lues ! Notez bien que les modifications doivent se faire dans QGIS, et non pas dans un logiciel de tableur (excel, calc…).

 

Voilà, vous savez désormais réaliser une jointure entre deux couches de données ! Aviez-vous déjà utilisé les jointures ? De façon plus complexe peut-être ?

 

Un petit coup de pouce : si cet article vous a plu ou vous a été utile, n’hésitez pas à le partager ! Merci :)

Marie Filipe

           

Mon super pouvoir de geek ? Je peux me séparer de mon écran ! Quand je n’ai pas la tête dans des lignes de code ou en pleine rédaction d’un article, j’ai le nez dans un roman de space opera, ou l’œil sur des plantes et des petites bêtes...

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Restez informé !

Inscrivez-vous à la newsletter pour être informé en avant-première de toutes les nouveautés de NaturaGIS !

Bienvenue sur NaturaGIS, espace d'échange et de partage d'astuces et de conseils autour des SIG et de leurs usages pour l'environnement. En poursuivant votre navigation sur ce site vous acceptez l’utilisation de cookies à des fins statistiques, pour vous proposer des contenus personnalisés et pour vous offrir des fonctionnalités relatives aux réseaux sociaux.