Kontynuując to pytanie: Jak włączyć / wyłączyć wszystkie etykiety wszystkich warstw w QGIS , OP wspomniał w swoim komentarzu , że używa etykiet opartych na regułach. Próbowałem wyszukać w Internecie, jak można czytać i modyfikować tego rodzaju etykiety, ale udało mi się znaleźć ten post z lutraconsulting :
Aby ułatwić dodawanie etykiet opartych na regułach, wprowadzono pewne wewnętrzne zmiany w interfejsie silnika etykietowania QGIS. Etykietowanie jest teraz kierowane przez nową klasę, z
QgsLabelingEngineV2
którą może być powiązanych kilku dostawców etykiet.
Brzmi wspaniale. Jednak podczas czytania klasy QgsLabelingEngineV2 wspomina:
ta klasa nie jest jeszcze częścią publicznego API.
Czy obecnie można kontrolować etykietowanie oparte na regułach za pomocą Pythona?
źródło
Odpowiedzi:
Poniżej pomoc w konfiguracji od podstaw etykietowania za pomocą nowego API QGIS 3
Niestety nie mogę znaleźć sposobu na iterację istniejących reguł, metoda labeling () dostępna dla warstw wektorowych zwraca obiekt klasy QgsAbstractVectorLayerLabeling, ale wydaje się, że nie ma sposobu na uzyskanie reguły root ( QgsRuleBasedLabeling ) z tej klasy, jedyna możliwość Odkryłem, że mogę uzyskać ustawienia PAL bezpośrednio przy użyciu identyfikatorów dostawców, ale nie mam dostępu do drzewa reguł. Czy ktoś ma jakiś pomysł?
EDYTOWAĆ
Zostało to naprawione, funkcja labeling () zwraca QgsRuleBasedLabeling (): https://github.com/qgis/QGIS/commit/4b365a8f47d96b35f7609859e580388927ae0606
źródło
myLayer.triggerRepaint()
odświeżenie warstwy i zezwolenie na wyświetlanie etykiet natychmiast po ustawieniu reguł :)Z QGIS 3 dostępna jest nowa klasa QgsRuleBasedLabeling, która pozwala kontrolować etykietowanie oparte na regułach za pomocą nowego API.
Reguły można dodawać za pomocą QgsRuleBasedLabeling :: Rule .
( Niestety nie mogę w tej chwili przetestować wersji 2.99. Z radością przyjąłbym odpowiedź, gdyby stanowiła działający przykład. )
źródło
Tego używam do zmiany wyrażenia filtru w opartej na regułach symbolice w QGIS 2.18, nie jestem pewien, czy o to prosisz. Dokumentacja interfejsu API na stronie http://qgis.org/api/2.18/classQgsRuleBasedRendererV2.html
źródło