#1 Fri 19 March 2021 18:00
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
QGIS: Etiquettes basees sur des regles
Bonjour,,
Je dois effectuer un atlas sur la représentation de tronçons de lignes. J'arrive à réaliser l'atlas mais aussi l'étiquetage sur le tronçon mis en valeur sur l'atlas avec cette expression :
CASE WHEN $id=@atlas_featureid then "troncon" END
Je précise que l'étiquetage est basé sur deux types : TRACE et VARIANTE;
Ce que je n'arrive pas à faire, c'est l'étiquetage des autres tronçons.
J'ai bien dupliqué la couche, fait un catégorisé sur le type et l'étiquetage qui va avec. Le problème est que l'étiquetage de la couche dupliquée entre en conflit avec l'étiquetage de la couche principale. En effet lorsque ne s'affiche que l'étiquette du tronçon visible dans l'atlas, il y a aussi la même étiquette mais de la couche dupliquée.
Comment faire pour afficher l'étiquetage du tronçon visible et les autres, sans que ceux-ci n'entrent en conflit.
En espérant avoir été clair, Merci.
Hors ligne
#2 Fri 19 March 2021 20:37
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 181
Re: QGIS: Etiquettes basees sur des regles
Bonjour
Peut-être employer l'expression "inverse" sur votre couche dupliquée, genre :
CASE WHEN $id=!@atlas_featureid then "troncon" END
si j'ai bien compris et que le conflit d'étiquette ne concerne du coup que l'entité courante (double étiquette, couche+couche dupliquée)
Hors ligne
#3 Fri 19 March 2021 22:13
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Etiquettes basees sur des regles
Peut-être employer l'expression "inverse" sur votre couche dupliquée, genre :
CASE WHEN $id=!@atlas_featureid then "troncon" END
Merci c'était presque cela. Sur la couche dupliquée j'ai mis
Peut-être employer l'expression "inverse" sur votre couche dupliquée, genre :
CASE WHEN $id is not @atlas_featureid then "troncon" END
Et ça marche. Encore merci.
Par contre sur les communes qui sont concernées par le tronçon sur l'atlas, peut-on faire la même chose. C'est-à-dire un symbole lorsqu'elles sont traversées pas le tronçon dans l'atlas et un autre symbole lorsque ce n'est pas le cas?
Hors ligne
#4 Fri 19 March 2021 22:25
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Etiquettes basees sur des regles
oulala, je reposte pas très clair tout cela
DONC :
Merci c'était presque cela. Sur la couche dupliquée j'ai mis
CASE WHEN $id is not @atlas_featureid then "troncon" END
Et ça marche. Encore merci.
Par contre sur les communes qui sont concernées par le tronçon sur l'atlas, peut-on faire la même chose. C'est-à-dire un symbole lorsqu'elles sont traversées pas le tronçon dans l'atlas et un autre symbole lorsque ce n'est pas le cas?
Hors ligne
#5 Sat 20 March 2021 21:13
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 181
Re: QGIS: Etiquettes basees sur des regles
Bonjour
super si vous avez pu faire l'ajustement pour votre couche dupliquée!
Oui je pense que si vous rapatriez par exemple le code insee de vos communes sur chaque tronçon de cable (1 tronçon serait ainsi associé à une commune), vous pourriez ensuite appliquer une expression sur votre couche commune du même genre en cas de correspondance des codes entre l'entité de l'atlas de votre couche troncon et la couche commune, une symbologie catégorisée :
Code:
CASE WHEN attribute(@atlas_feature, 'insee_com')="INSEE" THEN 'Commune du tronçon courant de l''atlas' ELSE 'Autres Communes' END
Expression sur la couche commune bien entendu, et dans la mesure ou vous disposez d'un code insee par troncon couche qui vous sert pour l'atlas!
Après on peut tout autant utiliser une expression vérifiant l'intersection des géometries si vous n'avez/ne voulez pas d'identifiant commun mais selon le volume d'entités dans vos couches etc.... le faire en dynamique sur les géom peut être long pour l'affichage de vos symbologies catégorisées..
Hors ligne
#6 Mon 22 March 2021 12:07
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: QGIS: Etiquettes basees sur des regles
Bonjour,
Je suis un peu déconcerté par votre requête. Pourriez-vous m'aiguiller là-dessus :
Couche commune : COMMUNES_TRACE.shp
Champ insee de COMMUNES_TRACE.shp : INSEE_COM
Couche des tronçons : test.shp
Ce shape contient le code insee rapatrié de la couche COMMUNES_TRACE.shp
Pourriez-vous adapter votre requête avec les éléments cités plus haut.
CASE WHEN attribute(@atlas_feature, 'insee_com')="INSEE" THEN 'Commune du tronçon courant de l''atlas'
ELSE 'Autres Communes' END
Merci.
Hors ligne
#7 Mon 22 March 2021 21:42
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 181
Re: QGIS: Etiquettes basees sur des regles
Bonjour
1-je voulais dire que du coup dans votre couche test.shp il faut également un code insee par entité (calculatrice de champ permet de le récupérer de différentes manières, ou boite à outils ou SQL), comme j'ai compris que c'est cette couche qui vous sert de couche d'atlas!
2-Ensuite, créer un style catégorisé sur COMMUNE_TRACE.shp avec l'expression citée, seul le 'insee_com' est peut être à remplacer fonction du nom que vous donnerez au champ des codes insee en 1
Code:
CASE WHEN attribute(@atlas_feature, 'insee_com')="INSEE_COM" THEN 'Commune du tronçon courant de l''atlas' ELSE 'Autres Communes' END
Ainsi vous aurez deux catégories (Peut-être à créer manuellement si vous n'avez pas activé le mode atlas) pour la couche commune que vous pourriez étiquetter sur le même principe que la différentiation symbologique opérée par l'expression :
A-une catégorie 'Autres communes' qui sera le symbole/étiquette de base (toutes les communes sauf B)
B-une catégorie 'Commune du tronçon courant de l'atlas' dès lors que l'atlas est activé avec votre couche test.shp, pour la commune ayant le même code insee que le tronçon courant de l'atlas
Dernière modification par Julien81 (Mon 22 March 2021 21:45)
Hors ligne