Pages: 1
- Sujet précédent - QGIS: Calculatrice vecteur - valeur depuis une autre couche - Sujet suivant
#1 Sun 23 February 2020 17:56
- Frédéric Duhart
- Juste Inscrit !
- Date d'inscription: 22 Dec 2016
- Messages: 9
QGIS: Calculatrice vecteur - valeur depuis une autre couche
Bonjour,
Je me demande si il est possible, depuis la calculatrice de champ d'une couche vecteur de récupérer la valeur d'un attribut d'une autre couche.
Par exemple, pour une couche de point, je voudrai pouvoir récupérer un attribut d'une entité polygone contenant ce point.
Je sais que la fonction 'Joindre les attributs par localisation' permet cela, mais est-il possible de le faire dans la calculatrice? et si oui comment?
merci!
Hors ligne
#2 Mon 24 February 2020 01:49
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 171
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Bonsoir,
\1ere méthode : un aggregat par la calculatrice permet cela et plus encore :
aggregate('DEPARTEMENT','max',"INSEE_DEP",intersects(centroid(geometry(@parent)),$geometry))
ici (totalement inutile mais à trnasposer), je suis sur une couche commune en màj sur un champ pour récupérer le code dep de ma couche DEPARTEMENT type admin express.
Il faut voir la couche commune, en mise à jour, comme ta couche de points (ici=centroid(geometry(@parent)), donc pour ton cas seulement geometry(@parent) car couche de points : ok pour intersects avec $geometry de 'DEPARTEMENT' (=ta couche de polygone "contenants"))
le $geometry dans le aggregate concerne la couche cible 'DEPARTEMENT' ; Je te renvoie sur la doc dans l'interface graphique pour les autres méthodes d'aggrégat ('concatenate','collect',...), mais ça devrait faire le taf, à adapter selon ton champs à récupérer et ta couche cible!
aggregate('couche_cible','methode_aggr',"champ_cible",expression filtre,..)
\2eme méthode : extension Refunction à installer, puis dans la calculatrice de champs dans onglet/groupe Reference, de nouvelles fonctionnalités permettent de croiser deux couches et de récupérer les infos de l'une dans l'autre
Ou jointure spatiale en effet avec génération d'une nouvelle couche
Hors ligne
#3 Mon 24 February 2020 14:45
- Frédéric Duhart
- Juste Inscrit !
- Date d'inscription: 22 Dec 2016
- Messages: 9
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Merci,
Ca me parait très clair. je vais analyser tout cela.
Hors ligne
#4 Thu 16 April 2020 10:20
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 723
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Bonjour à tous,
Je relance le sujet car j'ai un cas à peu près identique mais qui ne fonctionne qu'à moitié !
J'ai donc, sous format shape, une couche de points et une couche de communes.
Je souhaite renseigner dans la couche points, l'attribut "nom" avec le nom de la commune qui les contiennent.
J'ai donc utilisé la formule suivante :
Code:
aggregate( 'communes','concatenate', "nom", intersects($geometry, geometry(@parent)))
où "communes" est le nom de ma couche de communes et "nom", l'attribut que je cherche à renseigner.
J'ai d'abord fait le test sur un extrait de données et cela a très bien fonctionné.
Or quand je veux le faire sur ma couche de points entière, je n'ai rien (même l'aperçu du résultat dans la calculatrice de champs ne renvoie que ", alors qu'avec l'extrait de la couche, je voyais bien apparaître un nom de commune).
J'en déduis qu'il me manque quelque chose, mais je ne vois pas quoi...
Merci de vos éclaircissements.
Cordialement.
Hors ligne
#5 Thu 16 April 2020 12:20
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 723
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
J'ai, à tout hasard, installé les Reffunctions et ai testé
Code:
geomintersects('communes','nom')
depuis la calculatrice de champs et aucun résultat (ni erreur) non plus.
Hors ligne
#6 Thu 16 April 2020 13:48
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
L'utilisation d'aggregate et concatenate me semble inversée. Ce serait pertinent si vous vouliez créer une phrase pour chaque commune avec le nom des points qu'elle contient. Pas pour l'inverse. Là vous voulez une valeur unique. Pas besoin d'aggréger ni de concatener. Facile à faire en SQL, mais la syntaxe de la calculatrice de champs ne m'est pas familière. Je vais tenter de m'y pencher.
Dernière modification par carteq (Thu 16 April 2020 13:48)
Hors ligne
#7 Thu 16 April 2020 15:36
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 723
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Je le fais de temps à autre en sql également, mais la contrainte de travailler avec des shapes fait que je me suis intéressé à cette fonctionnalité d’agrégat, dont je ne suis pas familier non plus.
Et là, je cherche, je cherche...
Le paramètre concatenate semble indispensable dans la fonction du même nom, c'est le seul qui semble capable de retourner une chaine.
Mais si vous trouvez, je suis preneur !!
Merci.
Hors ligne
#8 Thu 16 April 2020 16:21
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Concatenate est essentiel cas d'aggrégation, en effet. Mais là, aucun besoin d'aggréger.
Hors ligne
#9 Thu 16 April 2020 16:51
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 723
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Quelle fonction utiliser alors ?
Si j'en crois cette vidéo (https://www.youtube.com/watch?v=aMEhdW6rvB4) je recherche une utilisation similaire non ?
Hors ligne
#10 Thu 16 April 2020 17:08
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
J'ai essayé :
aggregate( layer:='communes', aggregate:='concatenate', expression:="champ_nom_commune_dans_la_couche_de_communes",
filter:=intersects( $geometry, geometry( @parent ) ) )
Ça fonctionne. J'ai testé 19000 entités. Ça prend un temps ridiculement long comparé au SQL.
Je me demande si votre expression "nom" n'est pas erroné dans votre essai mentionné plus haut ? Est-ce vraiment le nom du champ dans la couche commune ?
Je vais chercher quelque chose de plus direct que aggregate.
Hors ligne
#11 Thu 16 April 2020 17:14
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 723
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Je viens de tester sur une autre couche de points et votre formule fonctionne. J'en déduis que c'était ma couche de test qui posait problème.
N'ayant qu'une centaine de points, le temps m'importe peu.
Merci de votre aide.
Cordialement.
Hors ligne
#12 Thu 16 April 2020 17:14
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Si j'en crois cette vidéo (https://www.youtube.com/watch?v=aMEhdW6rvB4) je recherche une utilisation similaire non ?
Dans la video, il y un lien de un-à-plusieurs. Dans votre cas, c'est un-pour-un : un point n'est que dans une commune. Rien à aggréger. Il faut juste aller chercher la valeur.
Hors ligne
#13 Thu 16 April 2020 17:32
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 723
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Oui tout à fait. Mais si cela le fait pour plusieurs éléments à concaténer, on peut supposer que cela le fasse pour un seul.
Même s'il y a peut-être plus simple.
Dernière modification par chanteclair (Thu 16 April 2020 17:33)
Hors ligne
#14 Thu 16 April 2020 19:34
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
@parent :
Refers to the current feature in the parent layer, providing access to its attributes and geometry when filtering an aggregate function
Il semble qu'on ait pas le choix d'utiliser aggregate si on utilise @parent.
Dernière modification par carteq (Thu 16 April 2020 19:35)
Hors ligne
#15 Fri 17 April 2020 09:28
- chanteclair
- Participant assidu
- Lieu: Pau
- Date d'inscription: 3 Jan 2007
- Messages: 723
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Merci pour ces précisions.
Cela fonctionne pour ce que j'ai à faire, je vais m'en satisfaire pour ces shapes à traiter ponctuellement.
Bonne journée
Hors ligne
#16 Sun 24 April 2022 08:48
- rybaack
- Juste Inscrit !
- Date d'inscription: 23 Apr 2022
- Messages: 1
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
bonjour,
J'aimerais croiser les geometries d'un shp polygone avec celle d'un shp ligne.
Il faudrait que j'attribue dans un nouvelle colonne de mon shp polygone, les linéaires(via : $length) de ligne contenue dans chaque geometrie de polygone.
Cela est t il possible par la calculatrice d'expression?
Hors ligne
#17 Thu 28 April 2022 15:32
- shirosaki
- Participant actif
- Lieu: Lyon
- Date d'inscription: 30 Mar 2018
- Messages: 125
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
bonjour,
J'aimerais croiser les geometries d'un shp polygone avec celle d'un shp ligne.
Il faudrait que j'attribue dans un nouvelle colonne de mon shp polygone, les linéaires(via : $length) de ligne contenue dans chaque geometrie de polygone.
Cela est t il possible par la calculatrice d'expression?
Bonjour,
Dans un premier temps, quel version de Qgis utilisez vous ?
Si vous utilisez la 3.16, il faudra installer l'extension "array plus" (sur le gestionnaire de plugin)
Si vous avez la dernière version en date, pas la peine normalement.
Ensuite, aller sur votre couche polygone et via la calculatrice d'expression mettez une formule du genre :
Code:
array_sum( overlay_within('nom_de_la_couche_ligne',$length) )
attention, cette formule marche uniquement si vos deux couches sont dans le même système de projection
Dernière modification par shirosaki (Thu 28 April 2022 15:49)
Paul QUESNOT
Hors ligne
#18 Thu 28 April 2022 15:45
- Robin.k
- Participant occasionnel
- Date d'inscription: 15 Mar 2022
- Messages: 45
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Bonjour,
Pour les dernières versions de QGIS 3, la fonction est intégrée, exemple :
array_to_string(overlay_within('communes',insee ))
Pour récupérer l'attribut insee de la couche 'commune'.
Pour les versions précédentes, il faut installer l'extension refunction et utiliser ainsi la fonction geomwithin('communes',insee ).
S'il n'y a pas de résultats, plusieurs possibilités :
- Les couches n'ont pas le même système de projection
- L'attribut est mauvais ex : colonne formatée pour recevoir des nombres entiers alors qu'on essaye de mettre du texte.
- Plusieurs polygones se superposent, la fonction ne sait pas lequel prendre
- La formule est mauvaise, il faut remplacer within par touches ou nearest ou contains ou interstects selon l'opération spatiale voulue. (Mais dans votre cas ça devrait être within.
Bonne journée,
Dernière modification par Robin.k (Thu 28 April 2022 15:46)
Hors ligne
#19 Mon 08 April 2024 17:44
- cyrille
- Participant assidu
- Date d'inscription: 7 Feb 2006
- Messages: 394
Re: QGIS: Calculatrice vecteur - valeur depuis une autre couche
Bonjour, je reouvre le dossier.
Comment faire pour mettre dans une etiquette calculee ou une info bulle dynamique la longueur des polylignes contenues dans un departement ?
Ex longueur des lignes de chemin de fer par departement ?
j'a testé array_sum(
overlay_intersects ('PARIS_HENDAYE_L2E',$length)
)
Alors que ca fonctionne très bien avec des ponctuels dans un département :
aggregate(layer:= 'Immeuble_R_L2E', aggregate:= 'count', expression:= 'Immeuble_R_L2E',
filter:= contains(geometry(@parent), $geometry))
Merci de vos lumières.
Dernière modification par cyrille (Tue 09 April 2024 09:04)
Hors ligne
Pages: 1
- Sujet précédent - QGIS: Calculatrice vecteur - valeur depuis une autre couche - Sujet suivant