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

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Sun 25 April 2021 12:03

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

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

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

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


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

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

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

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.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#10 Mon 26 April 2021 14:52

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1085

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

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

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).

En ligne

 

#13 Mon 26 April 2021 16:15

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 947
Site web

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

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

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

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)

En ligne

 

#17 Tue 27 April 2021 10:54

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

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

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

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...

En ligne

 

#20 Tue 27 April 2021 12:04

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

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

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

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

Re: QGIS: Automatisation des noms sur la page de garde

Bonjour,
Super!

En ligne

 

#24 Wed 28 April 2021 18:39

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

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

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

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

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.

En ligne

 

#28 Mon 10 May 2021 15:14

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

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

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

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)

En ligne

 

Pied de page des forums

Powered by FluxBB