Mais

Renomear camadas com script PyQGIS

Renomear camadas com script PyQGIS


Acabei de descobrir o QGIS e fiquei muito impressionado! Não tenho treinamento formal em GIS, então confie no Google para descobrir as coisas.

Estou usando os arquivos SHP disponibilizados pelo governo canadense como parte de seu conjunto CANVEC +. Os arquivos SHP são disponibilizados pela folha de mapa NTS.

A nomenclatura mostra quais dados estão na camada. Eu tenho um arquivo em lote que copia as camadas que estou interessado em um diretório de planilha de mapas.

Eu estava tentando renomear a camada com um script PyQGIS. Exemplos na internet me levaram a ser capaz de listar as camadas. Se as declarações corresponderem ao que eu preciso. Mas não consegui descobrir se posso atribuir um novo valor de nome dessa forma?

Existe uma maneira melhor de fazer isso, porque acho que este é um problema bastante comum?

Posso usar a mesma lógica de script para atribuir uma transparência (ou talvez até mesmo um estilo)?


setLayerName ()irá renomear a camada:

para camada em QgsMapLayerRegistry.instance (). mapLayers (). values ​​(): layer.setLayerName ('NewName')

Desde 2.16 éQgsMapLayer.setName ('thenewname')

Desde 3.x é:

para camada em iface.layerTreeView (). selectedLayers (): layer.setName ('NewName')

Este script (para QGIS 3) itera sobre todas as camadas do projeto e substitui o texto escolhido em seu nome. Simplesmente cole isso dentro do console QGIS Python. Isso funciona para QGIS 3

layerList = QgsProject.instance (). layerTreeRoot (). findLayers () para a camada em layerList: basename = layer.name () layer.setName (basename.replace ("db_prefix_to_be_followed_by_a_space", ""))

ou, se desejar fazer isso apenas sobre as camadas selecionadas no painel de camadas:

para camada em iface.layerTreeView (). selectedLayers (): basename = layer.name () layer.setName (basename.replace ("db_prefix_to_be_followed_by_a_space", ""))

(não se esqueça de colocar o espaço ofensivo entre as primeiras aspas) (o texto vazio entre as segundas aspas apagará efetivamente o texto encontrado nas primeiras aspas)

Isso servirá ao adicionar um banco de dados (como gpkg ou fgdb) a um projeto para remover o nome do banco de dados prefixado no nome da camada. Isso também tornará mais fácil fazer referência a essas camadas no DB_manager porque os espaços nos nomes não são compatíveis com o preenchimento automático. (a partir de 3.8)

A outra resposta, bem como esta outra questão (sem saber como listar as camadas carregadas no QGIS 3 via Python) me levaram a encontrar essa solução completa.

Além disso, como visto na outra resposta, use isso para QGIS 2

QgsMapLayerRegistry.instance (). MapLayers (). Values ​​():

Assista o vídeo: QGIS Python PyQGIS - Access vector layer attributes