Исходя из этого вопроса: Как включить / выключить все метки всех слоев в QGIS , OP упомянул в своем комментарии, что он использует метки на основе правил. Я попытался найти в Интернете, как эти типы ярлыков можно прочитать и изменить, но мне удалось найти этот пост только у lutraconsulting :
Для облегчения добавления маркировки на основе правил были внесены некоторые внутренние изменения в интерфейс механизма маркировки QGIS. Маркировка теперь управляется новым классом,
QgsLabelingEngineV2
который может иметь несколько провайдеров меток, связанных с ним.
Звучит здорово. Однако при чтении через класс QgsLabelingEngineV2 упоминается:
этот класс еще не является частью публичного API.
Возможно ли в настоящее время контролировать маркировку на основе правил с помощью python?
источник
Ответы:
Ниже приведена некоторая помощь по настройке надписей на основе правил с нуля с помощью нового API QGIS 3.
К сожалению, я не могу найти способ перебора существующих правил, метод labeling (), доступный для векторных слоев, возвращает объект класса QgsAbstractVectorLayerLabeling, но, похоже, нет способа получить корневое правило ( QgsRuleBasedLabeling ) из этого класса, единственная возможность Я обнаружил, что нужно напрямую получать настройки друзей, используя идентификаторы провайдеров, но я не могу получить доступ к дереву правил. У кого-нибудь есть подсказка?
РЕДАКТИРОВАТЬ
Теперь это исправлено, функция labeling () возвращает QgsRuleBasedLabeling (): https://github.com/qgis/QGIS/commit/4b365a8f47d96b35f7609859e580388927ae0606
источник
myLayer.triggerRepaint()
чтобы обновить слой и позволить отображать метки сразу после установки правил :)В QGIS 3 появился новый класс QgsRuleBasedLabeling, который позволит вам управлять маркировкой на основе правил с помощью нового API.
Правила могут быть добавлены с использованием QgsRuleBasedLabeling :: Rule .
( К сожалению, в настоящее время я не могу протестировать версию 2.99. Но я бы с радостью принял ответ, если бы он предоставил работающий пример. )
источник
Это то, что я использую для изменения выражения фильтра в символике на основе правил в QGIS 2.18, но не уверен, что это то, что вы просите. Ссылка на API по адресу http://qgis.org/api/2.18/classQgsRuleBasedRendererV2.html
источник