Suite à cette question: comment activer / désactiver toutes les étiquettes de toutes les couches dans QGIS , OP a mentionné dans son commentaire qu'il utilise des étiquettes basées sur des règles. J'ai essayé de rechercher en ligne comment ces types d'étiquettes pouvaient être lus et modifiés, mais j'ai seulement réussi à trouver ce message de lutraconsulting :
Afin de faciliter l'ajout d'un étiquetage basé sur des règles, certaines modifications internes ont été apportées à l'interface du moteur d'étiquetage QGIS. L'étiquetage est désormais piloté par la nouvelle classe
QgsLabelingEngineV2
qui peut être associée à plusieurs fournisseurs d'étiquettes.
Super. Cependant, lors de la lecture de la classe QgsLabelingEngineV2 , il mentionne:
cette classe ne fait pas encore partie de l'API publique.
Est-il actuellement possible de contrôler l'étiquetage basé sur des règles à l'aide de python?
la source
Réponses:
Ci-dessous une aide pour configurer l'étiquetage basé sur des règles à partir de zéro avec la nouvelle API QGIS 3
Malheureusement, je ne trouve pas comment itérer sur les règles existantes, la méthode étiquetage () disponible pour les couches vectorielles renvoie un objet de la classe QgsAbstractVectorLayerLabeling mais il semble qu'il n'y ait aucun moyen d'obtenir la règle racine ( QgsRuleBasedLabeling ) de cette classe, la seule possibilité J'ai trouvé que j'obtenais directement les paramètres de pal en utilisant les identifiants des fournisseurs mais je ne peux pas accéder à l'arborescence des règles. Quelqu'un a une idée?
ÉDITER
Il est maintenant corrigé, la fonction labellisation () renvoie un QgsRuleBasedLabeling (): https://github.com/qgis/QGIS/commit/4b365a8f47d96b35f7609859e580388927ae0606
la source
myLayer.triggerRepaint()
pour actualiser le calque et permettre aux étiquettes de s'afficher immédiatement après avoir défini les règles :)Depuis QGIS 3 , il existe une nouvelle classe QgsRuleBasedLabeling qui vous permettrait de contrôler l'étiquetage basé sur des règles à l'aide de la nouvelle API.
Les règles peuvent être ajoutées à l'aide de QgsRuleBasedLabeling :: Rule .
( Malheureusement, je ne peux pas tester la version 2.99 pour le moment. Mais j'accepterais volontiers une réponse si elle fournit un exemple de travail. )
la source
C'est ce que j'utilise pour changer une expression de filtre dans la symbologie basée sur des règles sous QGIS 2.18, je ne sais pas si c'est ce que vous demandez. Référence de l'API sur http://qgis.org/api/2.18/classQgsRuleBasedRendererV2.html
la source