Joindre deux couches de données différentes : shapefile et tableur

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 attributaires 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 QGIS 3). 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é cd_nom 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é cd_nom 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é cd_nom. (Remarque : ces attributs peuvent très bien avoir un nom de colonne différent.)

Ces deux champs (un dans chaque table) 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 8, 11 et 12 ? », vous irez lire le code de l’espèce dans la table attributaire de la couche SIG des observations (c’est le 446695) puis vous irez lire le nom de l’espèce qui a pour code 446695 dans la couche de données provenant du tableur listant les noms d’espèces.

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

La jointure attributaire

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

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 « Nom des 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 cd_nom).

→ 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 (CD_NOM) 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 446695 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 446695 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’une jointure.

Définition d’autres paramètres

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 Champs joints (= les champs à joindre) puis cochez les champs que vous voulez voir apparaître dans votre couche. Ici j’ai choisi d’ajouter seulement les noms des espèces (lb_nom).

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 par défaut : Noms des taxons_lb_nom, Noms des 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. Comme dans cet exemple où j’ai modifié la valeur par défaut par : Taxon_.

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

Finaliser la jointure attributaire

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.

Résultat de la jointure attributaire dans QGIS

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 446695 ont le bon nom d’espèce, ainsi que les données avec le code 645950, et ainsi de suite.

Conclusion : quelques remarques importantes sur une 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 ?

Cet article vous a plu et vous pensez qu’il pourrait être utile à quelqu’un d’autre ? Partagez le sur vos réseaux grâce aux boutons juste en dessous ! Merci !