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


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

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.


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

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

 

Pied de page des forums

Powered by FluxBB