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é ?

#1 Thu 20 May 2021 15:32

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1668

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: 1668

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: 3932

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: 1668

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: 1668

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: 1668

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: 3932

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: 1668

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: 3932

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: 1668

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: 1668

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: 3932

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: 1668

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: 1668

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: 3932

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: 1668

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: 3932

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: 1668

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: 1668

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: 1668

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 wink


Sylvain M.

Hors ligne

 

#22 Sat 22 May 2021 12:22

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1668

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: 3932

Re: QGIS: Mettre le nom des parcelles automatiquement le composeur

Bonjour,

sylvain M. a écrit:

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: 1668

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: 3932

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: 1668

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: 3932

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: 1668

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: 3932

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

SANTANA a écrit:

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 big_smile

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 ! big_smile


Sylvain M.

Hors ligne

 

Pied de page des forums

Powered by FluxBB