QGIS Загрузка нескольких стилей на один слой одновременно

10

У меня сохранен набор файлов стилей qml, которые я применяю к одинаковым слоям в нескольких проектах. Примером может служить слой шейп-файла типа линии с дюжиной различных стилей; В настоящее время я должен повторить процесс добавления нового стиля и загрузки файла qml для каждого из различных стилей. Затем я должен сделать это еще несколько раз в этом проекте и повторить все это снова в следующем проекте.

Просто пытаетесь понять, есть ли способ загрузить несколько файлов стилей на один слой одновременно? Что-то вроде вместо просмотра одного qml, я мог бы выбрать несколько файлов qml и загрузить их одновременно?

Пример нескольких стилей на слой

CEL-ма
источник
1
Что вы подразумеваете под загрузкой нескольких стилей одновременно на одном слое? Не будет ли последний загруженный стиль переопределить все предыдущие загруженные стили? Или вы хотите загрузить множество стилей для нескольких копий одного слоя?
artwork21
Мой текущий рабочий процесс заключается в открытии свойств слоя; используйте кнопку стиля (внизу слева), чтобы добавить новый стиль, назначьте имя, а затем загрузите сохраненный файл .qml, а затем повторите для всех (10-20) стилей, которые использует слой. В настоящее время я должен сделать это один за другим, около 7-8 слоев, в> 25 проектах. (повторяющиеся данные, слои и карты, но файлы проектов разделены географически по муниципалитетам - каждый муниципалитет является отдельным клиентом)
CEL-ma
Здесь есть похожий вопрос о желании использовать python, но ответа пока нет, gis.stackexchange.com/questions/294016/…
artwork21

Ответы:

3

Вы можете загрузить несколько стилей, используя скрипт pyqgis (пояснения в комментариях):

import os
from qgis.core import QgsMapLayerStyle
from qgis.utils import iface

# set path to your styles here
qml_path = '/home/user/qml'

layer = iface.activeLayer()
style_manager = layer.styleManager()

# read valid style from layer
style = QgsMapLayerStyle()
style.readFromLayer(layer)

for qml_file in [f for f in os.listdir(qml_path)
                 if os.path.isfile(os.path.join(qml_path, f)) and
                 f.endswith('.qml')]:
    # get style name from file
    style_name = os.path.basename(qml_file).strip('.qml')
    # add style with new name
    style_manager.addStyle(style_name, style)
    # set new style as current
    style_manager.setCurrentStyle(style_name)
    # load qml to current style
    (message, success) = layer.loadNamedStyle(os.path.join(qml_path, qml_file))
    print message
    if not success:  # if style not loaded remove it
        style_manager.removeStyle(style_name)

Вы можете запустить его в консоли Python QGIS или адаптировать к сценарию обработки.

(Проверено на текущей версии LTR QGIS 2.18)

barteksch
источник
1
Большое спасибо! Мне удалось успешно загрузить несколько стилей - я получил сообщение об ошибке «[Errno 9] Bad file descriptor» во время работы алгоритма, но он все же успешно завершился! Это спасет меня много работы!
CEL-ma
Для всех, кто читает этот пост в будущем; Вышеупомянутое сообщение об ошибке «Плохой файл» было связано с тем, что путь qml имеет как линейные, так и векторные узлы. После разделения больше нет ошибок.
CEL-ma
Кто-нибудь может помочь преобразовать этот код в Python 3, чтобы он работал в QGIS 3?
CEL-ma
0

Если я вас правильно понимаю, вы просто хотите иметь возможность быстро и легко применять стили геометрии, а не обязательно правила или выражения к слоям в любом проекте, который вы открыли?

Если это так, вы можете просто сохранить свои стили в библиотеке символов с помощью менеджера стилей? Откройте панель стилей слоя и нажмите кнопку «Открыть библиотеку».

Фил Барлоу
источник
извините, да - стили, которые я хотел бы для пакетной загрузки, основаны на правилах.
CEL-ma