Message posté par : Kiecane
----------------------------------------
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 :
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
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.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=361321#p361321
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net