QGIS Load Vários estilos em uma camada ao mesmo tempo

10

Eu tenho um conjunto de arquivos de estilo qml salvos que aplico a camadas semelhantes em vários projetos. Um exemplo seria uma camada shapefile de tipo de linha com cerca de uma dúzia de estilos diferentes; Atualmente, tenho que repetir o processo de adicionar um novo estilo e carregar o arquivo qml para cada um dos estilos diferentes. Então eu tenho que fazer isso mais algumas vezes nesse projeto e repetir tudo novamente no próximo projeto.

Apenas tentando ver se há uma maneira de carregar vários arquivos de estilo na mesma camada ao mesmo tempo? Algo como, em vez de navegar para um único qml, eu poderia selecionar vários arquivos qml e carregá-los de uma só vez.

Exemplo de vários estilos por camada

CEL-ma
fonte
11
O que você quer dizer com carregar vários estilos ao mesmo tempo na mesma camada? O último estilo carregado não substitui todos os estilos carregados anteriores? Ou você deseja carregar muitos estilos em várias cópias da mesma camada?
precisa saber é o seguinte
Meu fluxo de trabalho atual é abrir as propriedades da camada; use o botão de estilo (canto inferior esquerdo) para adicionar um novo estilo, atribua um nome e, em seguida, carregue um arquivo .qml salvo e repita para o número de estilos que a camada usar (10 a 20). Atualmente, eu tenho que fazer isso individualmente, por cerca de 7-8 camadas, em> 25 projetos. (dados repetitivos, camadas e mapas, mas arquivos de projeto separada geograficamente pelos municípios - cada município é um cliente separado)
CEL-ma
Existe uma pergunta semelhante aqui que deseja usar python, mas ainda não há resposta, gis.stackexchange.com/questions/294016/…
artwork #

Respostas:

3

Você pode carregar vários estilos usando o script pyqgis (explicações nos comentários):

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)

Você pode executá-lo no console python do QGIS ou adaptar-se a um script de processamento.

(Testado na versão LTR atual QGIS 2.18)

barteksch
fonte
11
Muito obrigado! Consegui carregar com êxito vários estilos - recebi a mensagem de erro "[Errno 9] Bad file descriptor" enquanto ele executava o algoritmo, mas ele ainda foi concluído com êxito! Isso vai me poupar muito trabalho!
CEL-ma
Para qualquer pessoa que esteja lendo este post no futuro; a mensagem de erro "Arquivo inválido" acima mencionada ocorreu devido ao caminho qml ter camadas vetoriais de linha e nó. Uma vez separados, não há mais erro.
CEL-ma
Alguém capaz de ajudar a converter esse código em python 3 para que ele funcione no QGIS 3?
CEL-ma
0

Se estou entendendo corretamente, você só quer aplicar estilos de geometria e não necessariamente regras ou expressões a camadas de maneira rápida e fácil em qualquer projeto que você tenha aberto?

Nesse caso, você pode salvar seus estilos na biblioteca de símbolos usando o gerenciador de estilos? Abra o painel de estilos de camada e clique no botão "abrir biblioteca".

Phil Barlow
fonte
desculpe, sim - os estilos que eu gostaria de carregar em lote são baseados em regras.
CEL-ma