Como ignorar "lidar com camadas ruins" no QGIS?

11

Eu tenho um projeto QGIS (2.14.3-Essen) que uso tanto no trabalho como em casa. Eu mantenho todas, exceto duas camadas, com o projeto.

As duas camadas restantes são muito grandes - um DEM e uma colina com mais de 20 GB - e são armazenadas em diferentes caminhos no trabalho versus em casa.

Eu gostaria de ignorar o Handle Bad Layersdiálogo e manter os caminhos quebrados para essas camadas. Muitas vezes não me importo que sejam ruins; Quero fazer alterações em outras partes do projeto.

Existe uma maneira de fazer isso, ignorar ou pular a caixa de diálogo Lidar com camadas ruins, para não perder a referência às camadas se não as atualizar?

Aaron
fonte
Isso é algo que deve ser resolvido a montante no QGIS. Não seria muito difícil de fazer. Eu recomendaria obter esse upstream fixo (por exemplo, opções adicionais na caixa de diálogo: a) oculte nesta sessão b) corrija o caminho da fonte c) remova a camada). Existem muitas empresas que terão prazer em fazer isso por você.
Matthias Kuhn
1
@ Matthias Kuhn - Essa é uma ideia muito boa, seria um bom caminho a seguir. Eu uso uma das consultorias nessa lista (não tenho certeza se é a coisa certa para nomeá-las?). Vou explorar a possibilidade com eles. Obrigado
Martin Hügi
@ MartinHügi você fez algum progresso nisso? Algo semelhante levantou algum reconhecimento na lista de discussão lists.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn
Não, eu não progredi nisso, eu tinha esquecido, na verdade, uma vez que se tornou uma daquelas coisas com as quais vivemos. Obrigado pelo lembrete, posso fazer a pergunta à nossa consultoria ou é algo que já está em andamento? @ Aaron - Como isso funcionou para você?
Martin Hügi
Continuo usando minha solução alternativa. Dois projetos QGIS paralelos - um para o trabalho e outro para o lar.
Aaron

Respostas:

4

Basta fazer cópias separadas do arquivo do projeto para uso doméstico e profissional.

Os dados que você salvar serão gravados nos arquivos de origem da camada, não no arquivo do projeto.

Depois de terminar a parte da lição de casa, você pode levá-la ao trabalho e adicionar novamente as camadas ruins. Se você tiver um estilo difícil nas camadas, salve-o separadamente e adicione-o também.


Outra opção é agrupar um arquivo VRT em torno da fonte externa.

Um exemplo de amostra para um arquivo rasterizado Geotif, criado com gdal_translate:

<VRTDataset rasterXSize="1656" rasterYSize="846">
  <GeoTransform> 2.0005201224994706e+005, 6.2653333397239589e+002, 0.0000000000000000e+000, 6.9906275735481549e+006, 0.0000000000000000e+000,-6.2653333397239589e+002</GeoTransform>
  <Metadata>
    <MDI key="TIFFTAG_RESOLUTIONUNIT">2 (pixels/inch)</MDI>
    <MDI key="TIFFTAG_XRESOLUTION">120</MDI>
    <MDI key="TIFFTAG_YRESOLUTION">120</MDI>
  </Metadata>
  <VRTRasterBand dataType="Byte" band="1">
    <ColorInterp>Red</ColorInterp>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">testtif.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="1656" RasterYSize="846" DataType="Byte" BlockXSize="1656" BlockYSize="1" />
      <SrcRect xOff="0" yOff="0" xSize="1656" ySize="846" />
      <DstRect xOff="0" yOff="0" xSize="1656" ySize="846" />
    </SimpleSource>
  </VRTRasterBand>
</VRTDataset>

e uma amostra para um shapefile:

<OGRVRTDataSource>
    <OGRVRTLayer name="testshp">
        <SrcDataSource>F:\Karten\vrt\testshp.shp</SrcDataSource>
            <SrcLayer>testshp</SrcLayer>
            <GeometryType>wkbPolygon</GeometryType>
            <LayerSRS>EPSG:31466</LayerSRS>
    </OGRVRTLayer>
</OGRVRTDataSource>

Quando os arquivos de origem não estão presentes, a varredura é exibida como um quadrado preto (você pode tornar a camada invisível) e a camada vetorial se torna uma tabela não-geométrica, sem nenhuma mensagem de erro. Camadas não-vrt adicionais com arquivos de origem que não são removidos permanecerão e podem ser editadas. Se você reinstalar os arquivos de origem, tudo voltará ao normal, mesmo as alterações nas outras camadas.

AndreJ
fonte
1
Fazer projetos separados para casa e escritório é uma solução decente nesse caso específico. No entanto, existem outros casos, como quando um serviço de mapa está temporariamente inoperante, quando você deseja ignorar a notificação de camadas ruins. Então, novamente, pergunto: existe uma maneira de ignorar ou pular a caixa de diálogo Lidar com camadas ruins para que não se perca referência a determinadas camadas?
Aaron
Você pode fornecer mais detalhes sobre os arquivos VRT, o que são e como começar. Pelo que observei, os VRTs se aplicam apenas a rasters? E os arquivos vetoriais ou camadas PostGIS remotas que não estão disponíveis se não houver conexão. Como você pode ignorar essas 'Lidar com camadas ruins'?
Martin Hügi
@ MartinHügi, você também pode criar o VRT para arquivos vetoriais, mas isso ainda precisa de trabalhos manuais: gdal.org/drv_vrt.html e paolocorti.net/2012/03/08/gdal_virtual_formats . Expandirei minha resposta em breve para alguns exemplos.
Andrej
@AndreJ Obrigado, então, olhando através desses links, meu entendimento limitado é que um arquivo xml funciona como um mapa intermediário da fonte dos dados. Então, o QGIS 'pensa' que está lá, mesmo que a fonte de dados não esteja disponível? GDAL é algo que parece bom para você entender, ou pelo menos entender.
Martin Hügi 23/03
Sim, você está apenas enganando o manipulador de erros QGIS.
Andrej
3

Uma possível solução alternativa seria modificar o arquivo de projeto qgs usando um script. Descobri que, se você substituir a fonte de dados <datasource>.</datsource>, ela ignorará o pop-up Handle Bad Layers.

Script Python para executar, se você não quiser carregar determinadas camadas.

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

Script Python a ser executado para inserir o caminho apropriado da fonte de dados.

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.\path\to\your\datasource</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

Ao fazer isso, você pode configurar um DoNotLoad.pycom o script superior e um home.pycom caminhos para suas fontes domésticas e work.pycom caminhos para suas fontes de trabalho usando o segundo script como padrão.

Você terá um único projeto para trabalhar, mas poderá alterar facilmente seus caminhos, dependendo do ambiente em que se encontra, ou alterar os caminhos para que as camadas não sejam carregadas, mas continuem no seu projeto (todo o seu estilo é salvo e acho que você pode modificar o estilo, se quiser. Nada aparecerá no mapa).

TJ Rockefeller
fonte
Obrigado. Entendo o conceito, agora claramente preciso passar o tempo que pretendo dar a volta para começar a entender o uso básico do Python. Por enquanto, entendo o conceito porque editei manualmente o project.qgs com o WordPad para alterar a fonte de dados e a alterei novamente. O QGIS não ignorou as camadas ruins do identificador, mas como o <ID> atua como um espaço reservado, pude voltar e reverter minha alteração. Então, sim, eu entendo isso - eu acho.
Martin Hügi 22/03
Eu acho que este é um bom lugar para começar wiki.python.org/moin/BeginnersGuide
Martin Hügi
@ MartinHügi Se ajudar, obtive o padrão principal do meu script nesta resposta stackoverflow stackoverflow.com/a/290494/4708150 Isso explica a lógica do script mais detalhadamente. Certifique-se de olhar para os comentários. Há um comentário com a melhor classificação que explica por que existe uma vírgula no final da declaração impressa.
TJ Rockefeller
1

O plugin ChangeDataSource mantém as camadas no arquivo, movendo-as temporariamente para um grupo de camadas defeituosas. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Ele deve fazer o que você deseja. No ano passado, eu estava tendo um problema semelhante e percebi que havia o plug-in ChangeDataSource que funcionava com camadas, mas não lidava com camadas ruins. Mencionei que lidar com camadas ruins seria um ótimo recurso nos comentários do blog do desenvolvedor (Enrico Ferreguti). Dentro de uma semana ele havia acrescentado!

Baswein
fonte
Este plugin não funcionou para mim para lidar com camadas ruins. Eu tentei em dois laptops diferentes - um executando o Win7 e o outro Win10. Ambos têm o QGIS 2.18.0 instalado. Eu verifiquei "Lidar com camadas ruins" e reiniciei o QGIS após a instalação. O padrão do QGIS de lidar com camadas ruins continuou a aparecer, não a notificação do plugin encontrada e manipulada fontes de dados inválidas.
Aaron
Também não está funcionando para mim agora. Vou avisar o desenvolvedor.
Baswein
Eu verifiquei que o plugin changeDataSource é executado sem problemas. Corrijo algumas condições não detectadas lançando exceções ou relatando erros falsos e comprometo-me a repositório de uma nova versão. [Se seus problemas persistirem, informe] ( github.com/enricofer/changeDataSource/issues ) especificando conjuntos de dados ou as etapas operacionais para reproduzi-los.
Enrico Ferreguti
Para que o plug-in seja exibido, você precisa ter o Qgis em execução e abrir o projeto.
Baswein