Na sequência desta pergunta: Como ativar / desativar todos os rótulos de todas as camadas no QGIS , o OP mencionou em seu comentário que ele usa rótulos baseados em regras. Tentei pesquisar on-line sobre como esses tipos de etiquetas podiam ser lidos e modificados, mas só consegui encontrar esta postagem na lutraconsulting :
Para facilitar a adição de rotulagem baseada em regras, algumas alterações internas foram feitas na interface do mecanismo de rotulagem QGIS. A rotulagem agora é direcionada pela nova classe,
QgsLabelingEngineV2
que pode ter vários fornecedores de etiquetas associados a ela.
Parece bom. No entanto, ao ler a classe QgsLabelingEngineV2 , ele menciona:
essa classe ainda não faz parte da API pública.
Atualmente, é possível controlar a rotulagem baseada em regras usando python?
fonte
Respostas:
Abaixo, ajuda para configurar a etiquetagem baseada em regras do zero com a nova API do QGIS 3
Infelizmente, não consigo encontrar como iterar sobre as regras existentes, o método labeling () disponível para as camadas vetoriais retorna um objeto da classe QgsAbstractVectorLayerLabeling, mas parece que não há como obter a regra raiz ( QgsRuleBasedLabeling ) dessa classe, a única possibilidade Eu descobri que é para obter configurações diretamente do pal usando IDs de provedores, mas não consigo acessar a árvore de regras. Alguém tem uma pista?
EDITAR
Agora está corrigida, a função labeling () retorna um QgsRuleBasedLabeling (): https://github.com/qgis/QGIS/commit/4b365a8f47d96b35f7609859e580388927ae0606
fonte
myLayer.triggerRepaint()
para atualizar a camada e permitir que os rótulos para mostrar imediatamente depois de definir as regras :)No QGIS 3 , existe uma nova classe QgsRuleBasedLabeling que permite controlar a rotulagem baseada em regras usando a nova API.
Regras podem ser adicionadas usando QgsRuleBasedLabeling :: Rule .
( Infelizmente, não posso testar a versão 2.99 no momento. Mas aceitaria com satisfação uma resposta se ela fornecer um exemplo de trabalho. )
fonte
É isso que eu uso para alterar uma expressão de filtro na simbologia baseada em regras no QGIS 2.18, não tenho certeza se é isso que você está pedindo. Referência da API em http://qgis.org/api/2.18/classQgsRuleBasedRendererV2.html
fonte