QGIS Załaduj wiele stylów na jednej warstwie jednocześnie

10

Mam zapisany zestaw plików w stylu qml, które stosuję do podobnych warstw w wielu projektach. Przykładem może być warstwa kształtu pliku linii z kilkoma różnymi stylami; obecnie muszę powtórzyć proces dodawania nowego stylu i ładowania pliku qml dla każdego z różnych stylów. Potem muszę to zrobić jeszcze kilka razy w tym projekcie i powtórzyć całość jeszcze raz w następnym projekcie.

Próbujesz tylko sprawdzić, czy istnieje sposób na załadowanie wielu plików stylu na tej samej warstwie jednocześnie? Coś w rodzaju zamiast przeglądania pojedynczego pliku qml, mógłbym wybrać kilka plików qml i załadować je jednocześnie?

Przykład wielu stylów na warstwę

CEL-ma
źródło
1
Co rozumiesz przez ładowanie wielu stylów jednocześnie na tej samej warstwie? Czy ostatni załadowany styl nie zastąpiłby wszystkich wcześniej załadowanych stylów? A może chcesz załadować wiele stylów do wielu kopii tej samej warstwy?
grafika 21
Mój obecny obieg pracy polega na otwarciu właściwości warstwy; użyj przycisku stylu (lewy dolny róg), aby dodać nowy styl, przypisać nazwę, a następnie załadować zapisany plik .qml, a następnie powtórzyć dla wielu stylów (10-20) używanych przez warstwę. Obecnie muszę to robić pojedynczo, dla około 7-8 warstw, w> 25 projektach. (powtarzające się dane, warstwy i mapy, ale pliki projektów rozdzielone geograficznie przez gminy - każda gmina jest osobnym klientem)
CEL-ma
Jest tutaj podobne pytanie, które chce używać Pythona, ale nie ma jeszcze odpowiedzi, gis.stackexchange.com/questions/294016/…
artwork21

Odpowiedzi:

3

Możesz załadować wiele stylów za pomocą skryptu pyqgis (wyjaśnienia w komentarzach):

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)

Możesz uruchomić go w konsoli Python QGIS lub dostosować do skryptu przetwarzania.

(Testowane na bieżącej wersji LTR QGIS 2.18)

Barteksch
źródło
1
Dziękuję Ci bardzo! Udało mi się wczytać wiele stylów - podczas działania algorytmu pojawił się komunikat o błędzie „[Errno 9] Bad descriptor pliku”), ale nadal się powiódł! Zaoszczędzi mi to Mnóstwo pracy!
CEL-ma
Każdemu innemu czytającemu ten post w przyszłości; wyżej wspomniany komunikat o błędzie „Zły plik” wynikał z faktu, że ścieżka qml zawierała zarówno warstwy linii, jak i węzła Po rozdzieleniu nie ma już błędu.
CEL-ma
Czy ktoś może pomóc w konwersji tego kodu do Pythona 3, aby działał w QGIS 3?
CEL-ma
0

Jeśli dobrze cię rozumiem, po prostu chcesz mieć możliwość szybkiego i łatwego zastosowania stylów geometrii, a niekoniecznie reguł lub wyrażeń do warstw w każdym otwartym projekcie?

Jeśli tak jest, możesz po prostu zapisać swoje style w bibliotece symboli za pomocą menedżera stylów? Otwórz panel stylu warstw i kliknij przycisk „otwórz bibliotekę”.

Phil Barlow
źródło
przepraszam, tak - style, które chciałbym załadować wsadowo, są oparte na regułach.
CEL-ma