Siguiendo con esta pregunta: Cómo activar / desactivar todas las etiquetas de todas las capas en QGIS , OP mencionó en su comentario que usa etiquetas basadas en reglas. Intenté buscar en línea cómo se podían leer y modificar estos tipos de etiquetas, pero solo logré encontrar esta publicación en lutraconsulting :
Para facilitar la adición de etiquetado basado en reglas, se realizaron algunos cambios internos en la interfaz del motor de etiquetado QGIS. El etiquetado ahora es impulsado por la nueva clase
QgsLabelingEngineV2
que puede tener varios proveedores de etiquetas asociados.
Suena genial. Sin embargo, al leer la clase QgsLabelingEngineV2 , menciona:
Esta clase aún no forma parte de una API pública.
¿Actualmente es posible controlar el etiquetado basado en reglas usando python?
fuente
Respuestas:
A continuación, encontrará ayuda para configurar el etiquetado basado en reglas desde cero con la nueva API QGIS 3
Desafortunadamente, no puedo encontrar cómo iterar sobre las reglas existentes, el método labeling () disponible para capas vectoriales devuelve un objeto de la clase QgsAbstractVectorLayerLabeling , pero parece que no hay forma de obtener la regla raíz ( QgsRuleBasedLabeling ) de esta clase, la única posibilidad Lo que encontré es obtener configuraciones de pal directamente usando los identificadores de los proveedores, pero no puedo acceder al árbol de reglas. Alguien tiene una pista?
EDITAR
Ahora está arreglado, la función de etiquetado () devuelve un QgsRuleBasedLabeling (): https://github.com/qgis/QGIS/commit/4b365a8f47d96b35f7609859e580388927ae0606
fuente
myLayer.triggerRepaint()
para actualizar la capa y permitir que las etiquetas se muestren inmediatamente después de establecer las reglas :)Desde QGIS 3 , hay una nueva clase QgsRuleBasedLabeling que le permitiría controlar el etiquetado basado en reglas utilizando la nueva API.
Las reglas se pueden agregar usando QgsRuleBasedLabeling :: Rule .
( Desafortunadamente, no puedo probar la versión 2.99 en este momento. Pero me encantaría aceptar una respuesta si proporciona un ejemplo de trabajo ) .
fuente
Esto es lo que uso para cambiar una expresión de filtro en la simbología basada en reglas en QGIS 2.18, no estoy seguro de si eso es lo que está pidiendo. Referencia de API en http://qgis.org/api/2.18/classQgsRuleBasedRendererV2.html
fuente