Procurando a função de limpeza para remover camadas do arquivo qgs que não estão presentes no painel Camadas do QGIS?

8

Tenho alguns projetos QGIS que utilizo há muito tempo, adicionando e removendo camadas, atualizando referências a arquivos excluídos ou movidos etc.

Abrindo o arquivo qgs com um editor de texto, vejo que ele contém inúmeras referências a arquivos diferentes, e essas referências não são mostradas no painel da árvore Camada.

Eu tenho três casos diferentes: referências a arquivos existentes, referências a arquivos ausentes, referências a conexões com o banco de dados. Soube disso quando abri meu projeto em outra máquina, e o QGIS relatou uma falta de conexão com o banco de dados para tabelas vetoriais não presentes na visualização em árvore de camadas.

A exclusão manual de referências do arquivo qgs resolveu o problema, mas estou gerenciando grandes projetos e é quase impossível verificar manualmente a consistência do projeto. Eu tentei o plug-in "Remover camadas vazias", mas as que estou tentando remover não são camadas vazias.

Existe alguma maneira de 'limpar' o arquivo qgis?

Bradypus
fonte
Você verificou armazenando caminhos relativos no arquivo .qgs? É no Setting--> Project Properties-->save paths-->relativeCheers N
Naresh
Que tal "Salvar como ..." em um novo arquivo de projeto?
ANDREJ
1
Isso não deu certo! Vou postar na lista de discussão dos usuários do QGIS um arquivo de projeto GQIS contendo uma camada fantasma, não presente no painel Camadas.
Bradypus
1
Você poderia postar esse arquivo qgs em algum lugar em que poderíamos acessá-lo? Não consigo duplicar sua situação. Talvez tudo o que você precise seja de um analisador simples.
ike
1
@ike Verifique aqui: lists.osgeo.org/pipermail/qgis-user/2012-September/019327.html . Você encontrará o projeto de teste que enviei para a lista de discussão. Para reproduzi-lo, você deve colocar um arquivo tif neste caminho relativo: ./Planimetrie/2012/plan01_2012.tif. Por favor, leia também as seguintes mensagens para mais detalhes.
Bradypus

Respostas:

7

As camadas em questão estão no registro de camadas, mas não na legenda .

O script python a seguir remove todas as camadas carregadas, mas não mostradas na legenda.

Removendo as camadas:

registryLayers = QgsMapLayerRegistry.instance().mapLayers().keys()
legendLayers = [ layer.id() for layer in iface.legendInterface().layers() ]
layersToRemove = set( registryLayers ) - set( legendLayers )
QgsMapLayerRegistry.instance().removeMapLayers( list( layersToRemove ) )

Ele deve ser executado no console python dentro do QGIS. Após aplicá-lo, você pode verificar a operação, verificando se as camadas foram removidas de Arquivo (Projeto na versão 2.0) => Propriedades do projeto => Camadas identificáveis . As alterações não são salvas automaticamente

Ao adicionar a seguinte linha no final, as alterações também serão salvas automaticamente.

iface.actionSaveProject().trigger()

Faça uma cópia de backup do seu arquivo de projeto (.qgs) antes de substituí-lo após aplicar esse script.

Para o QGIS 1.8, é necessário executar a seguinte linha inicialmente:

iface = qgis.utils.iface
Matthias Kuhn
fonte
Ok, estou recebendo erros quando o digito. Traceback (última chamada mais recente): Arquivo "<input>", linha 1, em <module> NameError: o nome 'legendLayerNames' não está definido
Ger
1
O QGIS 1.8 requer outra maneira de acessar o iface. A resposta é atualizada para refletir isso.
Matthias Kuhn
1
Eu acho que você tem aqui. Bem, funcionou no meu caso. E, como resultado, o QGIS Cloud funcionou melhor também, pois agora é possível fazer o upload das camadas. Excelente.
Ger
0

Além de muitas outras funções úteis, o plug-in chamado " Layer Board " (disponível no instalador do plug-in) possui um botão interno para "Remover camadas fantasmas" que resolve esse problema.

Além do botão de um clique para remover as camadas fantasmas, ele também permite exibir e remover camadas individuais em uma boa interface gráfica que lista cada camada e suas propriedades. Você pode selecionar qualquer uma dessas camadas individuais da tabela e clicar no botão "Remover camada" para resolver cada problema individualmente, se desejar.

No meu caso, a capacidade de remover referências de camadas individuais foi muito importante, porque eu tinha algumas "camadas fantasmas" que tinham o mesmo nome, mas foram referenciadas 2-3 vezes no registro. Usei a placa de camada para remover as entradas corretas individualmente e voltar à referência correta de camada única.

RyanKDalton
fonte