#1 Mon 20 January 2020 15:10
- HappyCX
- Juste Inscrit !
- Date d'inscription: 20 Jan 2020
- Messages: 5
QGIS: MAJ colonne par jointure spatiale
Bonjour,
Je gère les espaces verts d'une commune. J'ai donc une couche des jardins (polygones)et une couche des quartiers (polygones). J'aimerais mettre à jour la colonne quartier de ma couche jardin en passant par une analyse spatiale : chaque objet de la couche jardin prend le nom du quartier dans lequel il se situe.
Avec MapInfo c'était facile mais je ne trouve pas sur QGIS.
Quelqu'un aurait-il une solution à m'apporter?
Merci d'avance, Thomas
Windows 10 / QGIS 3.14.16
Hors ligne
#2 Mon 20 January 2020 15:36
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 726
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour,
Menu Vecteur/Outils de gestion de données/Joindre les attributs par localisation devrait répondre à votre question.
Cordialement.
En ligne
#3 Mon 20 January 2020 15:47
- HappyCX
- Juste Inscrit !
- Date d'inscription: 20 Jan 2020
- Messages: 5
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour,
J'ai essayé mais cela ne met pas à jour ma colonne. Cela crée une copie de ma couche en y ajoutant la colonne de la couche de référence... Admettons, mais comment après, mettre à jour ma colonne. Je reviens au point de départ si ce n'est que la jointure se fera sur des champs et non plus sur des objets. Cela ne m'avance pas vraiment.
Merci quand même d'avoir essayé.
Thomas.
Windows 10 / QGIS 3.14.16
Hors ligne
#4 Mon 20 January 2020 15:57
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 726
Re: QGIS: MAJ colonne par jointure spatiale
Vous travaillez avec des shapes ou sur une base type PostgreSQL ?
En ligne
#5 Mon 20 January 2020 16:26
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour,
formule de mise à jour du champs quartier de la couche jardin
en supposant que votre couche s'appelle quartier et que le nom de champs s'appelle "nom_quartier"
pensez à bien choisir texte comme type de donnée.
Fonctionne uniquement sous qgis 3 :
Code:
aggregate('quartier','concatenate_unique', "nom_quartier", filter:=intersects(geometry(@parent), $geometry))
Hors ligne
#6 Tue 21 January 2020 10:25
- HappyCX
- Juste Inscrit !
- Date d'inscription: 20 Jan 2020
- Messages: 5
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour,
Merci pour vos réponses.
Pour Chanteclair -> je travaille avec des shapefiles.
Pour JD -> pour vérifié que j'ai compris, je réécris votre formule comme suit :
aggregate('nom_couche_source','concatenate_unique', "nom_champs_source", filter:=intersects(geometry(@parent), $geometry))
Si c'est cela, ou désigne-t-on la couche cible et le champs à mettre à jour?
Veuillez excuser mon inexpérience.
Windows 10 / QGIS 3.14.16
Hors ligne
#7 Tue 21 January 2020 12:02
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour,
Vous renseignez cette formule dans la calculatrice de champs
Ou dans la table attributaire.
Cordialement,
Hors ligne
#8 Mon 12 October 2020 11:43
- HappyCX
- Juste Inscrit !
- Date d'inscription: 20 Jan 2020
- Messages: 5
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour,
Je reviens vers vous après quelques mois pour vous dire que je n'ai pas réussi. En fait QGIS ne trouve pas le champ source. Si je l'écris avec des "guillemets" il m'indique qu'il lui est impossible de calculer l’agrégat. Et si je l'écris avec des 'Côtes', il note en bas : "prévisualisation : 'nomduchamp'
et en résultat il écrit dans ma colonne le nom du champ et pas l'information de la colonne.
pour exemple : si mon champ s'appelle 'secteur' et que j'ai dans ma colonne : 'centre, 'est', 'ouest'... Il écrira à chaque ligne de ma colonne cible : 'secteur'
Si quelqu'un y comprend quelque chose et a une solution, je suis preneur.
Merci d'avance.
Windows 10 / QGIS 3.14.16
Hors ligne
#9 Mon 12 October 2020 13:58
- HappyCX
- Juste Inscrit !
- Date d'inscription: 20 Jan 2020
- Messages: 5
Re: QGIS: MAJ colonne par jointure spatiale
J'ai avancé et trouvé la jointure spatiale :
onglet vecteur -> outils de gestion de données -> joindre les attributs par localisation.
Cela me crée une nouvelle couche cible avec une colonne supplémentaire contenant la donnée de la couche source.
C'est un début, mais cela n'a pas modifié la table attributaire de la couche cible comme souhaité à l'origine.
Windows 10 / QGIS 3.14.16
Hors ligne
#10 Mon 12 October 2020 14:18
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour,
Si quelqu'un y comprend quelque chose et a une solution, je suis preneur.
Pourriez-vous partager la formule que vous utilisez, svp? Merci.
Hors ligne
#11 Wed 27 January 2021 11:23
- Laurent . M
- Participant occasionnel
- Lieu: Var
- Date d'inscription: 26 Jun 2008
- Messages: 19
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour
Avec la version de Qgis 3.10.13-A Coruña
Pour mettre à jour un champ existant avec la calculatrice de champ depuis une autre couche sur la base d’une jointure par localisation :
J'ai appliqué la formule donnée plus haut par JD et redéfini par HappyCX :
aggregate('nom_couche_source','concatenate_unique', "nom_champs_source", filter:=intersects(geometry(@parent), $geometry))
Après avoir "copier-coller" cette formule dans la calculatrice de champs, il faut aller chercher (et remplacer) le nom de la couche source depuis la liste à droite dans l'onglet couche (il y en a deux, prendre celle qui liste vos couches présentes dans Qgis)
Remarque 1 : La couche source en question n'a (dans mon cas) pas tout à fait le même nom puisqu'une série de nombre s'ajoute après le nom usuel de la couche : 'Comm_CAPV20190919175737322' au lieu de simplement 'Comm_CAPV'. Je suppose qu'il s'agit d'une sorte d'identifiant interne pour que Qgis s'y retrouve ( ?)
Par contre j'ai rentré manuellement le nom du champs source (entre "") qui devra remplir le champs cible à mettre à jour. Il n'y a , à priori, pas d'onglet qui liste les champs de la couche source.
Remarque 2 : les couches doivent avoir la même projection
Remarque 3 : dû fait de l'intersection (comme défini dans la formule) le champ mis à jour peut retourner plusieurs valeurs collées à la suite. Est-il d’ailleurs possible de mettre un séparateur de type "-" ?
Merci pour cette formule bien utile pour mettre à jour une colonne "en dur" sans passer par la création d'une nouvelle couche "jointure par localisation" (dans mon cas).
Peut-être qu'un outil pour faciliter encore d'avantage ce processus (aussi fréquent en géomatique) serait bienvenu ?
Dernière modification par Laurent . M (Wed 27 January 2021 11:38)
Hors ligne
#12 Wed 27 January 2021 13:05
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: MAJ colonne par jointure spatiale
Bonjour,
Je suppose qu'il s'agit d'une sorte d'identifiant interne pour que Qgis s'y retrouve ( ?)
Exact, étant donné que rien ne vous empêche d'avoir par exemple l'intitulé "communes" deux fois dans votre liste de couches (sans pour autant qu'elles renvoient à la même source de données, d'ailleurs). Au moins, là, on n'est sûr de la couche à laquelle on se réfère. Mais 'Comm_CAPV' l'aurait fait aussi.
Remarque 2 : les couches doivent avoir la même projection
C'est sûr et certain, ça? Je demande parce qu'il me semblait avoir compris que la V3 ne requerrait plus de correspondance de SCR des couches dans les traitements, du fait de la reprojection à la volée par défaut. Et comme je pense que ces fonctions utilisent les mêmes sources que le menu traitement, je me disais que la reprojection se ferait peut-être, de façon transparente.
Est-il d’ailleurs possible de mettre un séparateur de type "-" ?
Ajoutez concatenator:= '-' aux paramètres. Voir les exemples de la fonction aggregate dans le panneau à droite (aussi disponible ici) ou des fonctions concatenate(_unique).
Hors ligne
#13 Wed 27 January 2021 13:54
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: MAJ colonne par jointure spatiale
C'est sûr et certain, ça? Je demande parce qu'il me semblait avoir compris que la V3 ne requerrait plus de correspondance de SCR des couches dans les traitements, du fait de la reprojection à la volée par défaut. Et comme je pense que ces fonctions utilisent les mêmes sources que le menu traitement, je me disais que la reprojection se ferait peut-être, de façon transparente.
.
Je viens de tester (3.10.14) et ca fonctionne uniquement quand les couches ont la même projection.
Hors ligne
#14 Wed 27 January 2021 16:26
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: MAJ colonne par jointure spatiale
Merci pour la vérification. Étonnante, cette limitation...
Hors ligne