Pages: 1 2
- Sujet précédent - QGIS: Mettre le nom des parcelles automatiquement le composeur - Sujet suivant
#1 Thu 20 May 2021 15:32
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
QGIS: Mettre le nom des parcelles automatiquement le composeur
Bonjour,
Je dispose de quelques cartes à faire dans le composeur de cartes, où je dois mettre le nom des parcelles visibles sur le titre de la carte.
Comment faire de manière automatisée. J'ai testé comme lors d'un précédent post ceci. Parcelles-ouest étant le nom de la couche des parcelles :
[%with_variable('Parcelles_ouest’, array_foreach(map_get( item_variables ('Carte 1'), 'map_layers'),layer_property( @element, 'name' )),
case
when array_contains(@Parcelles_ouest, ‘Parcelles_ouest’) then 'Parcelles_ouest'
end)%]
Hors ligne
#2 Thu 20 May 2021 16:02
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Mais sans succès
Hors ligne
#3 Thu 20 May 2021 16:23
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Bonjour,
J'imagine que vos textes contiennent tous "Parcelles_ouest' oau lieu des numérs de parcelles.
[%with_variable('Parcelles_ouest’, array_foreach(map_get( item_variables ('Carte 1'), 'map_layers'),layer_property( @element, 'name' )),
C'est perturbant de créer une variable du même nom qu'une couche qui existe déjà. Nommez les choses différemment pour ne pas vous emmêler.
Cette formule assigne à la variable 'Parcelles_ouest' la liste des couches utilisées dans l'élément 'Carte 1'
case
when array_contains(@Parcelles_ouest, ‘Parcelles_ouest’) then 'Parcelles_ouest'
end)%]
Et celui-ci vérifie si la couche 'Parcelles-ouest' fait partie de la liste des couches, auquel cas vous lui dites d'écrire le texte 'Parcelles_ouest'.
Ici, vous voulez les parcelles visibles donc les parcelles qui intersectent l'étendue de la carte: il faut calculer cette étendue puis faire une intersection. Et la fonction aggregate vous permet de récupérer la liste.
Code:
aggregate( 'Parcelles_ouest',-- le nom de la couche que vous ciblez 'concatenate', -- le type d'aggrégation de données "idu", -- le champ contenant les données que vous souhaitez récupérer intersects($geometry, -- le filtre: soit l'intersection spatiale entre la géométrie de l'entité de la couche précédemment nommée map_get( item_variables('Carte 1'), 'map_extent') -- et l'emprise de l'objet carte que vous êtes en train de cibler ) )
Hors ligne
#4 Fri 21 May 2021 09:28
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Merci Santanna.
l'emprise de l'objet carte que vous êtes en train de cibler
C'est un paramètre que je ne saisis pas. Que dois-je y mettre dedans? J'ai essayé Carte 1 mais sans succès.
Hors ligne
#5 Fri 21 May 2021 09:35
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
J'ai essayé ceci :
aggregate('Parcelles_ouest','concatenate',"idu", intersects($geometry, map_get( item_variables('Carte 1'), 'map_extent')))
Mais le cadre texte du titre de la carte reste blanc....
Hors ligne
#6 Fri 21 May 2021 09:59
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Sinon j'ai essayé aussi ça :
with_variable( 'extent',map_get( item_variables( 'Carte 1' ), 'map_extent'),aggregate( 'Parcelles_ouest', 'concatenate', "idu",intersects( $geometry, @extent ), ' ,'))
Toujours pareil, cadre blanc...
Hors ligne
#7 Fri 21 May 2021 10:58
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Bonjour,
Votre élément carte s'appelle bien 'Carte 1'? Votre champ contenant les numéros de parcelle s'appelle bien "idu"?
Hors ligne
#8 Fri 21 May 2021 11:03
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
oui
Hors ligne
#9 Fri 21 May 2021 11:11
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Et vous avez bien des entités de "Parcelles_ouest" visibles dans "Carte 1"?
Que renvoie
Code:
aggregate( 'Parcelles_ouest', 'concatenate', "idu", concatenator:=', ')
EDIT: mauvais nom de variable
Dernière modification par SANTANNA (Fri 21 May 2021 11:38)
Hors ligne
#10 Fri 21 May 2021 11:26
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Pas de résultat, juste le code qui reste tel quel sur le cadre texte
Hors ligne
#11 Fri 21 May 2021 11:29
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
oui j'ai bien des entités de Parcelles_ouest visibles dans "Carte 1"
Hors ligne
#12 Fri 21 May 2021 11:37
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Désolé, c'est concatenator, pas delimiter dans ma formule
Hors ligne
#13 Fri 21 May 2021 11:41
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
C'est bon il y bien le code des parcelles qui s'affichent dans le cadre texte!
Hors ligne
#14 Fri 21 May 2021 11:45
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Mais ce sont toutes les parcelles et non pas uniquement celles que l'on voit à l'écran.
Hors ligne
#15 Fri 21 May 2021 12:02
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Oui, c'est fait exprès, pour débugger. Et ça permet de déduire que le problème se situe au niveau du filtre
intersects($geometry, map_get( item_variables('Carte 1'), 'map_extent')
Sauf à redemander si 'Carte 1' (écrit tel quel) est bien le nom de l'élément carte, tel qu'indiqué dans les propriétés à "ID de l'élément" ou dans "map_id" de la section Variables, je ne vois pas trop... J'imagine que l'objet carte n'est pas reprojeté, et encore....
Que renvoie le code suivant
Code:
geom_to_wkt(map_get( item_variables( 'Carte 1' ), 'map_extent'), 0)
Hors ligne
#16 Fri 21 May 2021 12:03
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
cadre blanc
Hors ligne
#17 Fri 21 May 2021 12:06
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
cadre blanc
Donc votre objet carte ne s'appelle pas "Carte 1". Regardez ce qui est indiqué comme "map_id" ou "item_id" dans la partie "Variables" de ses propriétés et utilisez cela.
Hors ligne
#18 Fri 21 May 2021 12:17
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Dans map_id j'ai ça : "
Hors ligne
#19 Fri 21 May 2021 12:23
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Santanna, une grande avancée, cela fonctionne! Dans le cadre, il n'y a que les parcelles visibles dans la carte qui sont représentées dans le cadre texte. Il ne reste plus qu'à séparer les parcelles entre elles par un tiret. Comment insérer ce tiret?
[%aggregate('Parcelles_ouest','concatenate',"idu", intersects($geometry, map_get( item_variables(''), 'map_extent')))%]
Hors ligne
#20 Fri 21 May 2021 14:35
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
C'est bon j'ai réussi à mettre le tiret entre les codes parcelles. J'ai remplacé "idu" par un champ "code_parce", moins gourmand en caractères.
Voici le code :
[%'Parcelle(s)' || ' ' || aggregate('Parcelles_ouest','concatenate',("code_parce" ||'' || '-'), intersects($geometry, map_get( item_variables(''), 'map_extent')))%]
Par contre :
- à la dernière parcelle cela se termine par "-"
- les parcelles sont énumérées par ordre décroissant
Hors ligne
#21 Fri 21 May 2021 19:34
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
C'est super cette formule : je viens de la mettre en pratique et ça va m'être utile !
Juste, je me permets une question complémentaire car je ne comprends pas la syntaxe de :
Code:
map_get( item_variables(''), 'map_extent')
Comme Conejo, ma carte n'a pas de valeur ( '' ) dans map_id. Et je n'ai pas trouvé comment modifier ce "map_id".
Car la formule n'a fonctionné pour moi que lorsque j'ai inséré une 2e carte dans la mise en page. Du coup, j'aimerais comprendre la syntaxe de ce "intem_variables('')".
Merci et désolé de rajouter une question dans ton sujet, Conejo
Sylvain M.
Hors ligne
#22 Sat 22 May 2021 12:22
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Bonjour,
Et merci à Santanna.
Comme Conejo, ma carte n'a pas de valeur ( '' ) dans map_id
Si si, si je vais dans map_id dans tes variables, j'ai ça : ". Il suffit de mettre ce qu'il y a dans ton map_id, et cela devrait fonctionner.
Hors ligne
#23 Mon 24 May 2021 10:11
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Bonjour,
Juste, je me permets une question complémentaire car je ne comprends pas la syntaxe de
Code:
map_get( item_variables(''), 'map_extent')
Dans les propriétés d'un élément de mise en page, il y a un groupe "Variables", avec des sections "Objet de mise en page" et/ou "Paramètres de Carte". Et c'est là que cette expression va fouiller.
item_variables permet d'accéder à la liste/le dictionnaire des variables de l'élément qui lui est passé et map_get permet de récupérer la valeur correspondant à la variable demandée.
Et je n'ai pas trouvé comment modifier ce "map_id".
Toujours dans les propriétés de l'objet, il y a un groupe "Identifiant de l'objet", un peu au-dessus de "Variables". c'est là que ça se passe. Et perso, je ne conseillerais pas de garder l'identifiant de l'objet à ", mieux vaut donner un nom explicite, pour éviter toute embrouille dans le futur. D'ailleurs à partir de la 3.18, les objets carte ont un id assigné par défaut, ce qui n'était pas toujours le cas avant.
Hors ligne
#24 Mon 24 May 2021 10:39
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Merci Santanna.
Par contre, j'ai ce petit souci (bien minime par rapport à ce que j'ai pu avancer).
Par contre :
- à la dernière parcelle cela se termine par "-".
- les parcelles sont énumérées par ordre décroissant
- Comment éviter le dernier tirer?
- Peut-on les mettre par ordre croissant?
Hors ligne
#25 Mon 24 May 2021 11:57
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Bonjour conejo,
Désolé, je vais faire mon chieur (une fois en passant, c'est pas grave, n'est-ce pas?). Vous vous êtes compliqué l'expression parce que vous n'avez pas encore intégré à quoi correspond chacun des paramètres que vous utilisez (ou qui sont à disposition). Et ceci me semble primordial si vous voulez pouvoir automatiser vos travaux comme le laissent penser vos récents messages. Autorisez-moi donc à vous renvoyer à la doc de la fonction aggregate: prenez le temps de lire la description des arguments, de voir les exemples fournis et je suis quasi sûr que vous trouverez les réponses.
Géomatiquement,
Santanna
Hors ligne
#26 Mon 24 May 2021 15:31
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
'Parcelle(s)' || ' ' || aggregate('Parcelles_ouest','concatenate',("code_parce" ||'' || '-'), intersects($geometry, map_get( item_variables(''), 'map_extent')))%]
Je comprends l'ensemble des arguments mais je n'arrive pas à placer l'argument "order_by". J'ai pourtant essayé pas mal de possibilités, mais sans succès. Comme celle-ci :
'Parcelle(s)' || ' ' || aggregate('Parcelles_ouest','concatenate',("code_parce" ||'' || '-'), order_by := "code_parce", intersects($geometry, map_get( item_variables(''), 'map_extent')))%]
Hors ligne
#27 Mon 24 May 2021 16:35
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Lorsque vous nommez explicitement un argument (ici, order_by:=), vous devez nommer a minima tous ceux qui suivent dans la fonction, càd filter:= intersects(...). Autrement, QGIS ne sait pas à quoi correspondent les arguments suivants. Sinon, vous ne les nommez pas et les passez dans l'ordre d'origine.
Hors ligne
#28 Mon 24 May 2021 17:00
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
'Parcelle(s)' || ' ' || aggregate('Parcelles_ouest', concatenate("code_parce", concatenator:=',', order_by:=" code_parce"), filter:= intersects($geometry, map_get( item_variables(''), 'map_extent')))
Toujours pas...
Hors ligne
#29 Tue 25 May 2021 09:58
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Bonjour,
Votre code est bien bien différent de ce que je suggérais d'essayer et ne correspond pas à la syntaxe de la fonction aggregate. Et n'hésitez pas à vous appuyer sur les messages d'erreur affichés par QGIS pour déboguer vous-même vos expressions.
Code:
'Parcelle(s) ' || aggregate('Parcelles_ouest', 'concatenate', "code_parce", concatenator:='-', order_by:="code_parce", filter:=intersects($geometry, map_get( item_variables('NOMMEZVOTRECARTE'), 'map_extent')))
Hors ligne
#30 Tue 25 May 2021 17:31
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: QGIS: Mettre le nom des parcelles automatiquement le composeur
Toujours dans les propriétés de l'objet, il y a un groupe "Identifiant de l'objet", un peu au-dessus de "Variables". c'est là que ça se passe.
MERCI SANTANA
J'ai mis du temps à le trouver !!! Même après avoir lu ton message : en fait, je cherchais dans la section "Variables" du panneau des Propriétés de l'Objet.
Du coup, NICKEL : j'ai mis à jour l'ID de ma carte, ainsi que la formule, et ça marche impeccable !
Sylvain M.
Hors ligne
Pages: 1 2
- Sujet précédent - QGIS: Mettre le nom des parcelles automatiquement le composeur - Sujet suivant