Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Mon 11 June 2018 16:14

Erwin ZLOTY
Participant occasionnel
Date d'inscription: 3 Sep 2013
Messages: 13

QGIS: Jointure CSV sur couche postgis

Bonjour à tous,

Je cherche à faire une jointure (ajout de 2 colonnes) d'un csv selon une colonne (de code) avec une couche de polygones déjà présente sur ma bdd postgis. Je sais faire une jointure sur QGIS, mais pas autrement. Quelqu'un pourrait m'expliquer de manière détaillée (je suis assez débutant) quelle sont les options possibles svp ?

Erwin

Hors ligne

 

#2 Mon 11 June 2018 17:03

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Jointure CSV sur couche postgis

Bonjour,

Le plus simple à mon avis est d'ajouter ton fichier CSV à ta base de données par un glisser déposer depuis le gestionnaire de base de données de Qgis (menu base de données dans Qgis 3).

Ensuite 2 solutions:
Soit tu fais ta jointure dans une requête postgresql, ex à adapter avec a ta couche existante, b ta couche à joindre et "code" le champ qui servira à faire la jointure:

Code:

select a.*, b.colonne_jointe1, b.colonne_jointe2
from a join b  using(code);

Soit dans Qgis:
- ouvrir les deux couches (poolygones + table de jointure (le csv importé à l'étape suivante)
- dans les propriété de la couche polygone, ajouter une jointure (de la manière classique que tu sembles connaître).

Bonne continuation.


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#3 Mon 11 June 2018 17:55

Erwin ZLOTY
Participant occasionnel
Date d'inscription: 3 Sep 2013
Messages: 13

Re: QGIS: Jointure CSV sur couche postgis

Merci pour ta réponse, j'ai essayé tes 2 options:

- la 1ère m'indique un message d'erreur :

select guyane_sirene_test.*, codes_naf_2.categorie_ov_1, codes_naf_2.ss_categorie_ov_1
from guyane_sirene_test join codes_naf_2  using(apet700);

ERROR:  ERREUR:  la relation « guyane_sirene_test » n'existe pas
LINE 2: from guyane_sirene_test join codes_naf_2  using(apet700);
             ^
SQL state: 42P01
Character: 83


- la 2ème option, la jointure a fonctionné mais n’apparaît pas ma BDD, il faut enregistrer la jointure quelque part ?

Hors ligne

 

#4 Tue 12 June 2018 10:10

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Jointure CSV sur couche postgis

Re,

Pour la première solution, l'erreur est explicite! wink
Elle t'indique qu'il n'existe pas de couche nommée "guyane_sirene_test" .
Il faut vérifer l'orthographe ou essayer avec des guillemets (si la couche existe):

Code:

from "guyane_sirene_test" blabla

.

Pour la 2ème option, si tu veux enregistrer ta jointure, tu peux l'enregistrer sous puis la refaire glisser/déposer dans le schéma de ton choix sur ton serveur. Cette solution marchera néanmoins si tu souhaites avoir quelque chose de "plus propre" l'idéal est de passer directement par des requêtes postdesql, ex:

Code:

CREATE TABLE guyane.ma_nouvelle_table AS (
SELECT a.*, codes_naf_2.categorie_ov_1, codes_naf_2.ss_categorie_ov_1
FROM a join codes_naf_2  USING(apet700) ) ;

Tu peux aussi créer une vue plutôt en remplaçant le CREATE TABLE par CREATE VIEW

Dans tous les cas un petit peu de lecture t'aidera à bien cerner ce que font les jointures (ne t'encombre pas avec les mots clés INNER et OUTER, leur usage est inutile dans de nombreux cas (notamment dans le tien)).
http://sql.sh/cours/jointures .

Attention par défaut, le mot clé JOIN fait un INNER JOIN (voir schéma sur le site que je t'ai donné).
Et je pense que qgis fait un LEFT JOIN.
Si tu veux garder les enregistrements sans correspondance, il faudra utiliser LEFT JOIN.

Le résultat de ta jointure s'ouvre alors comme n'importe quelle table de ton serveur PostGIS.
Bonne journée.


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#5 Tue 12 June 2018 11:12

Erwin ZLOTY
Participant occasionnel
Date d'inscription: 3 Sep 2013
Messages: 13

Re: QGIS: Jointure CSV sur couche postgis

Ca a marché, j'avais oublié de préciser schema.table. Merci beaucoup smile

Par contre, ca m'ajoute des colonnes à la fin, pas de problème pour cette table là, mais si pour les prochaines fois je veux les intégrer à des colonnes vides déjà présentes dans la table, que faut-il ajouter ??

Hors ligne

 

#6 Tue 12 June 2018 12:30

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: QGIS: Jointure CSV sur couche postgis

Re,

En SQL:
Soit il faut le gérer dans le SELECT (si le champ de la table source est vide ou peut être perdu), ex:

Code:

SELECT a.nom_commune, a.truc, a.machin, b.code_insee insee
FROM a join b  USING(id) ) ;

Dans ce cas le champ code_insee de la table jointe est renommé insee (et remplace le champ insee de la table a).

Avec Qgis:
Utiliser la calculatrice de champ pour écrire les données jointes dans la couche d'origine.
(remarque: on peut faire la même chose avec un UPDATE en SQL).

Bonne continuation.


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

Pied de page des forums

Powered by FluxBB