QGIS Carica più stili contemporaneamente su un singolo livello


10

Ho salvato un set di file in stile qml che applico a livelli simili su più progetti. Un esempio potrebbe essere un layer shapefile di tipo di linea con circa una dozzina di stili diversi; attualmente devo ripetere il processo di aggiunta di un nuovo stile e caricamento del file qml per ciascuno dei diversi stili. Quindi devo farlo ancora alcune volte in quel progetto e ripetere di nuovo tutto nel prossimo progetto.

Stai solo cercando di vedere se c'è un modo per caricare più file di stile sullo stesso livello contemporaneamente? Qualcosa di simile invece di sfogliare un singolo qml, potrei selezionare più file qml e caricarli contemporaneamente?

Esempio di più stili per livello


1
Cosa intendi con il caricamento di più stili contemporaneamente sullo stesso livello? L'ultimo stile caricato non avrebbe la precedenza su tutti gli stili caricati precedenti? Oppure vuoi caricare molti stili su più copie dello stesso livello?
artwork21

Il mio flusso di lavoro attuale è aprire le proprietà del layer; utilizzare il pulsante di stile (in basso a sinistra) per aggiungere un nuovo stile, assegnare un nome, quindi caricare un file .qml salvato, quindi ripetere per tutti gli stili (10-20) utilizzati dal layer. Attualmente, devo farlo uno per uno, per circa 7-8 livelli, in> 25 progetti. (dati ripetitivi, livelli e mappe, ma file di progetto separati geograficamente dai comuni - ogni comune è un cliente separato)
CEL-ma

C'è una domanda simile qui che vuole usare Python ma ancora nessuna risposta, gis.stackexchange.com/questions/294016/…
artwork21

Risposte:


3

Puoi caricare più stili usando lo script pyqgis (spiegazioni nei commenti):

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)

Puoi eseguirlo nella console Python di QGIS o adattarlo a uno script di elaborazione.

(Testato sull'attuale versione LTR QGIS 2.18)


1
Grazie mille! Sono stato in grado di caricare con successo più stili - ho ricevuto un messaggio di errore "[Errno 9] descrittore di file errato" durante l'esecuzione dell'algoritmo, ma è stato comunque completato con successo! Questo mi farà risparmiare MOLTO lavoro!
CEL-ma,

A chiunque legga questo post in futuro; il messaggio di errore "File errato" sopra menzionato era dovuto al percorso qml con livelli vettoriali sia di linea che di nodo. Una volta separati, non più errori.
CEL-ma,

Qualcuno in grado di aiutare a convertire quel codice in Python 3 in modo che funzioni in QGIS 3?
CEL-ma

0

Se ti sto capendo correttamente, vuoi solo essere in grado di applicare gli stili di geometria e non necessariamente regole o espressioni agli strati rapidamente e facilmente in qualsiasi progetto che hai aperto?

In tal caso, potresti semplicemente salvare i tuoi stili nella libreria dei simboli usando il gestore stili? Apri il pannello stile livello e fai clic sul pulsante "apri libreria".


scusate sì - gli stili che vorrei caricare in batch sono basati su regole.
CEL-ma,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.