QGIS Завантажте відразу кілька стилів на один шар


10

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

Ви просто намагаєтесь перевірити, чи існує спосіб завантаження декількох файлів стилів на один і той же шар одночасно? Щось на зразок замість перегляду одного файлу qml, я міг би вибрати кілька файлів qml і завантажити їх одночасно?

Приклад декількох стилів на шар


1
Що ви маєте на увазі, завантажуючи відразу кілька стилів на один і той же шар? Хіба останній завантажений стиль не замінить усі попередні завантажені стилі? Або ви хочете завантажити багато стилів у кілька копій одного шару?
картина21

Мій поточний робочий процес полягає у відкритті властивостей шару; скористайтесь кнопкою стилю (внизу зліва), щоб додати новий стиль, призначити ім’я та завантажте збережений файл .qml, а потім повторіть для багатьох (10-20) стилів, які використовує шар. В даний час я маю це робити один за одним, приблизно на 7-8 шарів, в> 25 проектах. (повторювані дані, шари та карти, але файли проектів, розділені географічно муніципалітетами - кожна муніципалітет є окремим клієнтом)
CEL-ма

Тут є подібне запитання, яке хочеться використовувати 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)

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

(Тестовано на поточній версії LTR QGIS 2.18)


1
Дуже дякую! Мені вдалося успішно завантажити декілька стилів - я отримав повідомлення про помилку "[Errno 9] Неправильний дескриптор файлу" під час роботи алгоритму, але він все ще успішно завершився! Це врятує мене багато роботи!
CEL-ма

Для всіх, хто читає цю публікацію в майбутньому; вищезгадане повідомлення про помилку "Неправильний файл" пояснювалося тим, що шлях qml має як векторний, так і векторний шари. Після розділення більше помилок не буде.
CEL-ма

Хтось може допомогти перетворити цей код на python 3, щоб він працював у QGIS 3?
CEL-ма

0

Якщо я правильно вас розумію, ви просто хочете мати змогу швидко та легко застосовувати стилі геометрії, а не обов’язково правила чи вирази для шарів у будь-якому відкритому вами проекті?

Якщо це так, ви можете просто зберегти свої стилі в бібліотеці символів за допомогою менеджера стилів? Відкрийте панель стилів шару та натисніть кнопку "відкрити бібліотеку".


Вибачте, так - стилі, які я хотів би завантажити, грунтуються на правилах.
CEL-ма
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.