#1 Sun 25 April 2021 12:03
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
QGIS: Automatisation des noms sur la page de garde
Bonjour, je réalise des cartes style autocad sur une seule page avec une page de garde et la carte correspondante qui suit. Trois types de cartes sont proposées : enjeux urbanistiques, naturalistes et liés aux réseaux. Sur chaque page de garde, un des trois enjeux est mentionné. Y-a-t-il un moyen d’automatiser l’inscription de chaque enjeu en fonction de la carte?
Merci.
Hors ligne
#2 Sun 25 April 2021 13:28
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 427
Re: QGIS: Automatisation des noms sur la page de garde
Bonjour. Il faudrait peut être préciser ou montrer un exemple ou schéma. En tout cas pour moi la demande n''est pas suffisamment claire pour que je réponde.
Hors ligne
#3 Sun 25 April 2021 16:48
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
une image vaut mieux que mille mots. Le type d'enjeu (en rouge sur l'image) doit être le même que celui de la carte.
- Si la carte traite des enjeux naturalistes, alors sur la page de garde il doit être écrit "naturalistes"
- Si la carte traite des enjeux urbanistiques, alors sur la page de garde il doit être écrit "urbanistiques"
- Si la carte traite des enjeux liés aux réseaux, alors sur la page de garde il doit être écrit "liés aux réseaux"
En espérant avoir été plus clair.
Hors ligne
#4 Sun 25 April 2021 17:00
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
une image vaut mieux que mille mots. Le type d'enjeu (en rouge sur l'image) doit être le même que celui de la carte.
- Si la carte traite des enjeux naturalistes, alors sur la page de garde il doit être écrit "naturalistes"
- Si la carte traite des enjeux urbanistiques, alors sur la page de garde il doit être écrit "urbanistiques"
- Si la carte traite des enjeux liés aux réseaux, alors sur la page de garde il doit être écrit "liés aux réseaux"
En espérant avoir été plus clair.
Avec l'image c'est mieux
Hors ligne
#5 Mon 26 April 2021 08:07
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 427
Re: QGIS: Automatisation des noms sur la page de garde
Merci pour l'exemple.
Comment est déterminé le type d'enjeu présent dans la carte ?
En fonction des géométries affichées dans la carte ?
Vous faites une action manuelle avant pour choisir d'afficher tel ou tel type d'enjeu (différentes couches et choix d'une de ces couches par exemple ?
Je ne comprends pas bien votre processus actuel à vrai dire.
Peut-être en utilisant les thèmes pour afficher l'une ou l'autre des couches enjeux (si ce sont bien plusieurs couches) et en nommant le thème comme le titre souhaité, puis en utilisant le nom du thème comme titre ?
https://docs.qgis.org/3.16/fr/docs/user … map-themes
Hors ligne
#6 Mon 26 April 2021 10:17
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Vous faites une action manuelle avant pour choisir d'afficher tel ou tel type d'enjeu (différentes couches et choix d'une de ces couches par exemple ?
Bonjour,
Oui, je réalise une action manuelle pour afficher tel ou tel type d'enjeu. Les couches sont regroupées en enjeux urbanistiques, naturalistes et liés aux réseaux.
Par ex, pour les enjeux urbanistiques, je coche dans le gestionnaire des couches le groupe des enjeux urbanistiques et crée une mise en page "enjeux urbanistiques". Il faudrait donc que dans la page de garde de la mise en page il y ait écrit "enjeux urbanistiques".
J'espère avoir été plus précis.
Hors ligne
#7 Mon 26 April 2021 12:35
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 181
Re: QGIS: Automatisation des noms sur la page de garde
Bonjour,
il aurait été intéressant d'avoir une capture de votre controleur de couche et rendu projet (pour au moins un des thèmes), histoire de bien cerner ce que vous cartographiez (entités d'une ou plusieurs couches, regroupements d'entités d'emprise variable etc...).
A priori vous avez une mise en page telle que presentée avant en pj mais pas d'atlas de paramétré (pour export/prévisualisation de la/des série/s de cartes que vous souhaitez à partir de vos jeux de données).
Je pense que si vous souhaitez automatiser un titre ou un thème ou tout élément lié à vos données à cartographier c'est bien l'atlas qui répond à votre besoin et comme il est multithématique, la proposition de p.jeremie d'utiliser les thème est la bonne.
Vos groupes de couches (avec leur style souhaité) que vous cochez manuellement, vous pouvez enregistrer cela comme un thème de visualisation :
groupe 1 -->naturaliste
grp2 -->urbanistique
grp3-->lié au réseau
...
Ensuite côté atlas dans mise en page on peut faire tout cela!
Il faudra au préalable générer une couche avec geom des emprises de toutes vos cartes (grp1 2 et 3) : 1ligne par carte/emprise souhaité, avec la geom et un attribut du type thème associé tel que créé dans le projet ; cette couche peu être un résultat de petite requête sql simple à partir des différentes couches d'entités à cartographier dans votre projet.
Une fois cela fait la couche d'atlas va permettre de paramétrer tout éléments de la mise en page pour qu'il soit lié de façon dynamique à vos données et thèmes créés tel qu'un titre, un lien, images, etc... infos stockées en attributs de votre couche d'atlas.
bon courage
Hors ligne
#8 Mon 26 April 2021 13:59
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1103
Re: QGIS: Automatisation des noms sur la page de garde
@p.jeremie : hello, pour info, il n'existe pas encore de variable qui permette d'appeler un nom de theme pour faire ce que tu souhaites.... Il me semble avoir poster une proposition de dev à ce sujet.
Hors ligne
#9 Mon 26 April 2021 14:05
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Voici un aperçu de mon gestionnaire de couches et le rendu projet. Ici la manip concerne les enjeux urbanistiques.
J'ai oublié de préciser que je travaille sur le projet d'installation d'une ligne à très haute tension sur 20 km, avec donc plusieurs plans à faire pour faire la totalité de la ligne.
Hors ligne
#10 Mon 26 April 2021 14:52
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1103
Re: QGIS: Automatisation des noms sur la page de garde
Conejo,
Est-ce que cet article peut t'aider ? : http://www.statsmapsnpix.com/2019/01/qg … field.html
On est d'accord que pour ton projet tu fais un atlas ?
Pour générer ta couche de polygone d'emprise, tu peux regarder l'extension Polystrip
Hors ligne
#11 Mon 26 April 2021 15:08
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Non, je ne pense faire un atlas. En effet, je fais des plans (environ 7) pour faire la totalité du tracé. L'emprise des plans est réalisée manuellement et sera la même pour chaque enjeu. Chaque emprise chevauche la précédente et la suivante. Il faudrait donc que lorsque la carte traite des enjeux urbanistiques, il faut qu'il y ait écrit "urbanistiques" dans la page de garde.
Hors ligne
#12 Mon 26 April 2021 16:09
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: Automatisation des noms sur la page de garde
Bonjour,
Je vais certainement faire écho aux précédents intervenants qui parlent d'utiliser les thèmes. Perso, c'est le must-have quand on a des projets impliquant plusieurs mises en pages de données traitant différentes thématiques/scenarios. On s'évite la prise de tête avec les bonnes couches et les bons groupes à rendre visibles avant de faire son export. Bref...
Il faudrait savoir en fonction de quoi se décide l'affichage de tel ou tel texte, genre identifier une couche particulière qui fait que si elle est affichée, pour sûr, on est dans les enjeux urba, une autre particulière pour les enjeux naturalistes et enfin une autre pour les réseaux. De là, on peut imaginer une expression qui fait que si la carte contient telle couche, bah le texte devient tel...
Code:
with_variable( 'liste_couches', -- on récupère la liste des couches de l'objet Carte 1 (code adapté de la doc) array_foreach( map_get( item_variables( 'Carte 1' ), 'map_layers' ), layer_property( @element, 'id' ) ), case when array_contains(@liste_couches, 'IDdemacouchespecialeurba') then 'URBANISTIQUES' when array_contains(@liste_couches, 'IDdemacouchespecialeresaux') then 'RESEAUX' when array_contains(@liste_couches, 'IDdemacouchespecialenature') then 'NATURALISTES' end )%]
L'idéal serait en effet la disponibilité d'une variable "thème de carte" pour changer le texte en fonction de ce qui est affecté à la carte (https://github.com/qgis/QGIS/issues/29581 -- Gladal si t'as aussi une requête, ça fait doublon).
Hors ligne
#13 Mon 26 April 2021 16:15
Re: QGIS: Automatisation des noms sur la page de garde
Salut,
Tu peux récupérer le nom du thème sélectionné dans la mise en page en créant une expression depuis une fonction Python pour suppléer au fait qu'il n'y a pas de fonction pour cela dans les expressions natives de QGIS. Tu peux ensuite appeler cette fonction comme une expression "classique".
C'est ce qui est proposé sur https://gis.stackexchange.com/a/316381/638
Hors ligne
#14 Mon 26 April 2021 19:16
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Bon je vous remercie de vos apports, mais je dois avouer que c'est un peu compliqué pour moi. Mais je vais quand même essayer.
Je vous dirai ça demain.
En attendant, n'y-a-t-il pas plus rapide en utilisant le titre de la mise en page? En effet, le nom de chaque mise en page sera associé à l'enjeu. Par exemple, la mise en page pour les enjeux urbanistiques se nomme enjeux_urba. Ne peut-on pas faire un "case when" en appelant la variable layout_name?
Hors ligne
#15 Tue 27 April 2021 09:01
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
J'ai lancé le code avec juste la couche ZU (zone d'urbanisme) pour retranscrire uniquement 'URBANISTIQUES' :
with_variable(‘ZU’, array_foreach(map_get( item_variables( ‘CONTRAINTES_URBA1 ), 'map_layers' ),layer_property( @element, 'id' )),
case
when array_contains(@ZU, 'ID') then 'URBANISTIQUES'
end)%]
Pouvez-vous me dire ce qui cloche?
Hors ligne
#16 Tue 27 April 2021 09:57
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: Automatisation des noms sur la page de garde
Bonjour,
En attendant, n'y-a-t-il pas plus rapide en utilisant le titre de la mise en page? En effet, le nom de chaque mise en page sera associé à l'enjeu. Par exemple, la mise en page pour les enjeux urbanistiques se nomme enjeux_urba.
Qu'appelez-vous "mise en page"? L'ensemble de la fenêtre dédiée qui s'ouvre lorsqu'on fait Projet --> Nouvelle mise en page? Si vous avez des mises en page différentes pour chaque type de cartes, pourquoi vouloir vous embêter à automatiser les choses? Pourquoi ne pas juste écrire le texte littéral dans le cartouche? Désolé mais je suis un peu perdu, là.
Ne peut-on pas faire un "case when" en appelant la variable layout_name?
bah si! mais cette info, nous on ne l'avait pas...
Pour votre expression, si 'ZU' est le nom de la couche, donc ce n'est pas 'id' qu'il faut utiliser mais 'name', et ce n'est pas 'ID' dont on cherche à vérifier la présence dans la liste des couches mais bien le terme 'ZU'. Et en supposant que 'CONTRAINTES_URBA1' représente l'id de l'élément carte qui nous intéresse, ça donnerait a priori quelque chose du genre (ils sont chelous vos apostrophes au début).
Code:
with_variable('ZU', array_foreach(map_get( item_variables( 'CONTRAINTES_URBA1' ), 'map_layers' ),layer_property( @element, 'name' )), case when array_contains(@ZU, 'ZU') then 'URBANISTIQUES' end)
Hors ligne
#17 Tue 27 April 2021 10:54
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Qu'appelez-vous "mise en page"? L'ensemble de la fenêtre dédiée qui s'ouvre lorsqu'on fait Projet --> Nouvelle mise en page? Si vous avez des mises en page différentes pour chaque type de cartes, pourquoi vouloir vous embêter à automatiser les choses? Pourquoi ne pas juste écrire le texte littéral dans le cartouche? Désolé mais je suis un peu perdu, là.
Il s'agit bien de Projet --> Nouvelle mise en page. En fait, je demande à l'automatiser car j'ai pas mal de cartes à faire, ce qui évite de vérifier du genre "Est-ce que le bon enjeu dans la page de garde par rapport à ce que l'on voit dans la carte?". Je préfère m'enlever cette épine du pied!
Ne peut-on pas faire un "case when" en appelant la variable layout_name?
bah si! mais cette info, nous on ne l'avait pas...
Voici ce que j'ai testé sans succès en appelant la variable layout_name :
case when
[%@layout_name%] = 'CONTRAINTES_URBA1'
then 'URBANISTIQUES' end
Enfin le code proposé ne fonctionne pas non plus.
Hors ligne
#18 Tue 27 April 2021 11:47
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Je suis parvenu à le faire en fonction du nom de la mise en page
'CONTRAINTES' || ' ' || CASE WHEN @layout_name = 'CONTRAINTES_URBA1' THEN 'URBANISTIQUES' END
Seulement comme il y plusieurs mises en page pour faire la totalité du tracé, il y aura CONTRAINTES_URBA1 pour la partie 1, CONTRAINTES_URBA2 pour la partie 2 etc jusqu'à la fin du tracé. J'ai essayé '%CONTRAINTES_URBA1%', sans succès...
Hors ligne
#19 Tue 27 April 2021 11:51
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: Automatisation des noms sur la page de garde
Il s'agit bien de Projet --> Nouvelle mise en page. En fait, je demande à l'automatiser car j'ai pas mal de cartes à faire, ce qui évite de vérifier du genre "Est-ce que le bon enjeu dans la page de garde par rapport à ce que l'on voit dans la carte?". Je préfère m'enlever cette épine du pied!
Ah OK, je vois.
Pour votre formule, les [% et %] servent en fait à encapsuler TOUTE la partie à évaluer, ce qui est expression (voir ici). Dans votre cas-ci on n'évalue que layout_name donc vous obtenez certainement un texte du style : "case when 'CONTRAINTES_URBA1' = 'CONTRAINTES_URBA1' then 'URBANISTIQUES' end".
En réalité c'est donc toute la formule qu'il faut mettre dedans, du case when au end.
Enfin le code proposé ne fonctionne pas non plus.
Oups! Mes présupposés énoncés précédemment sur les paramètres sont pour autant justes? Faudrait avoir le message d'erreur pour juger, mais bon, si l'option layout_name marche...
Hors ligne
#20 Tue 27 April 2021 12:04
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
OK je m'en approche. Je bloque juste pour la généralisation de toutes les pages. J'ai 'CONTRAINTES_URBA1', 'CONTRAINTES_URBA2' pour faire la totalité du tracé... Il faudrait en fait faire le filtre sur 'CONTRAINTES_URBA', pour mettre 'URBANISTIQUES'.
Hors ligne
#21 Tue 27 April 2021 12:31
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
C'est bon il fallait mettre like au lieu de =
[%CASE WHEN @layout_name LIKE '%CONTRAINTES_URBA%' THEN 'CONTRAINTES URBANISTIQUES'
WHEN @layout_name LIKE '%CONTRAINTES_ENVIR%' THEN 'CONTRAINTES NATURALISTES' END%]
Hors ligne
#22 Tue 27 April 2021 13:26
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Réponse complète avec les mises en page des réseaux :
[%CASE WHEN @layout_name LIKE '%CONTRAINTES_URBA%' THEN 'CONTRAINTES URBANISTIQUES'
WHEN @layout_name LIKE '%CONTRAINTES_ENVIR%' THEN 'CONTRAINTES NATURALISTES'
ELSE 'CONTRAINTES LIEES AUX RESEAUX' END%]
Hors ligne
#23 Wed 28 April 2021 17:46
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: Automatisation des noms sur la page de garde
Bonjour,
Super!
Hors ligne
#24 Wed 28 April 2021 18:39
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Merci le réseau, vous m'êtes précieux!
Hors ligne
#25 Mon 10 May 2021 09:30
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
with_variable('ZU', array_foreach(map_get( item_variables( 'CONTRAINTES_URBA1' ), 'map_layers' ),layer_property( @element, 'name' )),
case
when array_contains(@ZU, 'ZU') then 'URBANISTIQUES'
end)
Bonjour,
Santanna, j'ai essayé votre approche juste en remplaçant 'CONTRAINTES_URBA1' par 'test' et cela ne fonctionne tjs pas. Or il y a bien présence de 'ZU' dans le premier plan.
]with_variable('ZU', array_foreach(map_get( item_variables( 'test' ), 'map_layers' ),layer_property( @element, 'name' )),
case
when array_contains(@ZU, 'ZU') then 'URBANISTIQUES'
end
Hors ligne
#26 Mon 10 May 2021 09:34
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
with_variable('ZU', array_foreach(map_get( item_variables( 'test' ), 'map_layers' ),layer_property( @element, 'name' )),
case
when array_contains(@ZU, 'ZU') then 'URBANISTIQUES'
end)
Vous l'aurez compris une erreur de copier coller s'est glissée sur mon premier message.
D'ailleurs dans la prévisualisation j'ai ce message :
No feature was found on this layer to evaluate the expression.
Hors ligne
#27 Mon 10 May 2021 14:38
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: Automatisation des noms sur la page de garde
Bonjour,
Vous avez bien renseigné dans les propriétés que 'test' est le nom de l'objet carte?
Pour le message d'évaluation, ignorez (voir https://github.com/qgis/QGIS/issues/42884) et validez.
Hors ligne
#28 Mon 10 May 2021 15:14
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
Vous avez bien renseigné dans les propriétés que 'test' est le nom de l'objet carte?
Je le renseigne comment?
Hors ligne
#29 Mon 10 May 2021 16:02
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Automatisation des noms sur la page de garde
'test' est le nom de la mise en page lorsque je vais le chercher dans le gestionnaire de la mise en page.
Hors ligne
#30 Mon 10 May 2021 17:31
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3946
Re: QGIS: Automatisation des noms sur la page de garde
Le code fourni correspond au contexte où vous souhaitiez vous baser sur l'existence de la couche dans la carte. Donc pas le nom de la mise en page, mais plutôt l'élément Carte.
Pour indiquer l'info, Voir les propriétés de l'objet Carte. Il doit y avoir une entrée "identifiant de l'élément" (https://docs.qgis.org/3.16/fr/docs/user … properties)
Hors ligne