#1 Fri 23 June 2023 16:04
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
QGIS: probl complexe filtre etiquettes
Bonjour,
Je rencontre actuellement un problème lié à l'étiquetage d'une de mes couches dans un projet QGIS que je dois constituer. Il s'agit d'une couche vectorielle de type polyligne. J'ai mis en pièces jointes d’une part la forme de la table attributaire et d’autre part le rendu cartographique de la couche.
Dans ma table attributaire (pièce jointe), les deux champs auxquels on s’intéresse sont « bidule » et « truc ». Le champ « bidule » peut uniquement présenter les valeurs ‘oui’ et ‘non’. Le champ « truc » est quant à lui un champ alphanumérique qui peut contenir toutes les valeurs possibles (ces valeurs peuvent se répéter), soit ici ‘a’, ‘b’ et ‘rien’.
Objectif : étiqueter avec le champ « truc » les entités pour lesquelles « bidule » = ‘oui’, de telle sorte que lorsque deux entités présentent la même valeur de « truc » dans un périmètre proche, alors une seule étiquette est associée à ces toutes ces entités. Autrement dit (cf pièce jointe), je souhaiterais étiqueter ma couche avec les lettre roses.
Tests réalisés :
Pour l’ensemble de mes tests, j’ai créé un étiquetage basé sur des règles en mettant dans la partie Règle mon code (cf ci-dessous), et dans la partie Texte le champ « truc ». J’ai considéré que plusieurs entités pouvaient avoir la même étiquette lorsque leur tampon de 0.004 se touchait (pour des questions de lisibilité uniquement). J’ai réalisé de nombreux tests pour tenter d’atteindre mon but, mais aucun ne s’est avéré concluant pour le moment. Je vais donc exposer ceux qui me rapprochent au mieux du résultat que je souhaite obtenir :
CODE 1 :
Code:
CASE WHEN "bidule" = 'oui' AND array_length(array_distinct(aggregate('ma_couche', 'array_agg', $id, "bidule" = 'oui' and intersects($geometry, buffer(geometry(@parent), 0.004))))) = 1 THEN "truc" ELSE '' END
Le problème, c’est que cela m’affiche uniquement le b de l’entité 12. J’ai donc testé le code suivant pour y remédier :
CODE 2
Code:
CASE WHEN "bidule" = 'oui' AND array_length(array_distinct(aggregate('ma_couche', 'array_agg', $id, "bidule" = 'oui' and intersects($geometry, buffer(geometry(@parent), 0.004))))) = 1 THEN "truc" WHEN ("bidule" = 'oui' AND array_length(array_distinct(aggregate('ma_couche', 'array_agg', $id, "bidule" = 'oui' and intersects($geometry, buffer(geometry(@parent), 0.004))))) != 1) THEN array_to_string(array_distinct(aggregate('ma_couche', 'array_agg', 'array_agg', "truc", "bidule" = 'oui' and intersects($geometry, buffer(geometry(@parent), 0.004)))), ', ') ELSE '' END
mais cela ne fonctionne pas non plus….
Quelqu’un aurait-il une idée pour obtenir le rendu que je souhaite, c’est-à-dire les lignes avec les libellés roses associés (cf pièce jointe) ? Par ailleurs, n'hésitez pas à m'indiquer si vous avez besoin de plus amples informtions.
Merci d’avance, Cordialement.
Dernière modification par SANTANNA (Fri 23 June 2023 16:15)
Hors ligne
#2 Fri 23 June 2023 16:13
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
Re: QGIS: probl complexe filtre etiquettes
Pièce jointe 2. Je viens de voir les doublons de message, ce n'était bien évidemment en aucun cas intentionnel. Il doit s'agir d'un bug de mon ordinateur ou du site.
Hors ligne
#3 Fri 23 June 2023 17:16
- shirosaki
- Participant actif
- Lieu: Lyon
- Date d'inscription: 30 Mar 2018
- Messages: 125
Re: QGIS: probl complexe filtre etiquettes
Bonjour,
je partirais pour une solution plus simple (enfin si cela vous convient) :
Etape 1 : je créer un champ virtuel "truc_muche" que je rempli avec le formule suivante :
Code:
case when truc is not null then truc else overlay_nearest('nom_de_la_couche', truc)[0] end
Etape 2 : j'étiquette sur ce nouveau champ et dans les options de rendu des etiquettes j'utilise l'option "fusionner les lignes connectées pour éviter la duplication d'entités" (marche uniquement si vos lignes sont connectées entre elles)
J'ai créer un projet qgis exemple, je vous le met au lien suivant : https://github.com/shirosaki07/GEOREZO_ … -tiquettes
Cordialement,
Paul QUESNOT
Hors ligne