Come ignorare "gestire i layer danneggiati" in QGIS?


11

Ho un progetto QGIS (2.14.3-Essen) che utilizzo sia a lavoro che a casa. Tengo tutti tranne due strati con il progetto.

I due livelli rimanenti sono molto grandi - un DEM e una sfumatura di collina per un totale di oltre 20 GB - e sono memorizzati in percorsi diversi tra lavoro e casa.

Vorrei ignorare il Handle Bad Layersdialogo e mantenere i percorsi spezzati per quei livelli. Spesso non mi interessa che siano cattivi; Voglio apportare modifiche ad altre parti del progetto.

C'è un modo per farlo, ignorare o saltare la finestra di dialogo Gestisci livelli non validi in modo da non perdere il riferimento ai livelli se non li aggiorno?


Questo è qualcosa che dovrebbe essere risolto a monte in QGIS. Non sarebbe molto difficile da fare. Vorrei raccomandare di ottenere questo a monte fisso (es. Opzioni aggiuntive nella finestra di dialogo: a) nascondere in questa sessione b) correggere il percorso di origine c) rimuovere il livello). Ci sono molte aziende in giro che saranno felici di farlo per te.
Matthias Kuhn,

1
@Matthias Kuhn - È un'ottima idea, sarebbe una buona strada da percorrere. Uso una delle società di consulenza in quella lista (non sono sicuro che sia la cosa giusta per nominarle?). Esplorerò la possibilità con loro. Grazie
Martin Hügi il

@ MartinHügi hai fatto progressi su questo? Qualcosa di simile ha sollevato alcuni riconoscimenti nelle liste della mailing list.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn,

No, non ho fatto progressi, in realtà l'ho dimenticato perché è appena diventata una di quelle cose con cui viviamo. Grazie per il promemoria, posso porre la domanda alla nostra consulenza o è già in corso? @Aaron - Come ha funzionato per te?
Martin Hügi,

Continuo a usare il mio work-around. Due progetti paralleli QGIS: uno per il lavoro e uno per la casa.
Aaron,

Risposte:


4

Basta fare copie separate dal file del progetto per uso domestico e lavorativo.

I dati salvati verranno scritti nei file di origine del layer, non nel file di progetto.

Una volta terminata la parte dei compiti, puoi portarla al lavoro e aggiungere nuovamente i livelli danneggiati. Se hai uno stile difficile sui livelli, potresti salvarlo separatamente e aggiungerlo anche.


Un'altra scelta è quella di avvolgere un file VRT attorno alla fonte esterna.

Un esempio di esempio per un file raster Geotif, creato con 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 un campione per uno 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 i file di origine non sono presenti, il raster viene visualizzato come un quadrato nero (è possibile rendere invisibile il livello) e il livello vettoriale diventa una tabella non geometrica, senza messaggi di errore. Ulteriori livelli non VRT con file di origine che non vengono rimossi rimarranno e possono essere modificati. Se reinstalli i file di origine, tutto torna alla normalità, anche le modifiche agli altri livelli.


1
Realizzare progetti separati per casa e ufficio è una soluzione decente in questo caso particolare. Tuttavia, ci sono altri casi, come quando un servizio di mappe è temporaneamente inattivo, quando si desidera ignorare la notifica dei livelli non validi. Quindi ancora una volta chiedo, c'è un modo per ignorare o saltare la finestra di dialogo Gestisci livelli non validi in modo da non perdere il riferimento a determinati livelli?
Aaron,

Puoi fornire qualche dettaglio in più sui file VRT, cosa sono e come iniziare. Da quello che ho esaminato, i VRT si applicano solo ai raster? Che dire di file vettoriali o livelli PostGIS remoti che non sono disponibili se non c'è connessione. Come si possono ignorare questi "Gestisci i livelli danneggiati"?
Martin Hügi,

@ MartinHügi puoi anche creare VRT per file vettoriali, ma che ha ancora bisogno di lavoro manuale: gdal.org/drv_vrt.html e paolocorti.net/2012/03/08/gdal_virtual_formats . Espanderò presto la mia risposta per alcuni esempi.
AndreJ,

@AndreJ Grazie, quindi guardando attraverso quei collegamenti, la mia comprensione limitata è che un file xml si comporta come una mappa intermedia alla fonte dei dati. Quindi QGIS "pensa" che sia lì, anche se l'origine dati non è disponibile? GDAL è qualcosa che sembra essere buono da affrontare, o almeno avere una comprensione.
Martin Hügi,

Sì, stai solo prendendo in giro il gestore degli errori QGIS.
AndreJ,

3

Una possibile soluzione sarebbe quella di modificare il file di progetto qgs usando uno script. Ho scoperto che se si sostituisce l'origine dati con <datasource>.</datsource>, ignorerà il pop-up Gestisci livelli danneggiati.

Script Python da eseguire se non si desidera caricare determinati layer.

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 da eseguire per inserire il percorso dell'origine dati appropriato.

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

In questo modo potresti impostare uno DoNotLoad.pycon lo script in alto e uno home.pycon i percorsi verso le tue fonti domestiche e un work.pycon i percorsi verso le tue fonti di lavoro usando il secondo script come modello.

Avrai quindi un singolo progetto su cui lavorare, ma puoi facilmente cambiare i tuoi percorsi a seconda dell'ambiente in cui ti trovi o cambiare i percorsi in modo che i livelli non vengano caricati, ma siano ancora nel tuo progetto (tutto il tuo stile viene salvato e penso che puoi anche modificare lo stile se vuoi. Nulla apparirà nella mappa).


Grazie. Ho capito il concetto, ora ho chiaramente bisogno di passare quel tempo che avevo intenzione di andare in giro per iniziare a capire l'uso di base di Python. Per ora ottengo il concetto perché ho modificato manualmente project.qgs con WordPad per cambiare l'origine dati e ricambiarlo. QGIS non ha ignorato la gestione dei layer non validi, ma poiché <ID> agisce come segnaposto sono stato in grado di tornare indietro e ripristinare la modifica. Quindi sì, lo capisco - penso.
Martin Hügi,

Immagino che sia un buon punto di partenza per wiki.python.org/moin/BeginnersGuide
Martin Hügi,

@ MartinHügi se aiuta, ho ottenuto il modello principale per il mio script da questa risposta StackOverflow stackoverflow.com/a/290494/4708150~~V~~3rd Questo spiega la logica dello script in modo più approfondito. Assicurati di guardare i commenti. C'è un commento più votato che spiega perché c'è una virgola alla fine dell'istruzione di stampa.
TJ Rockefeller,

1

Il plug-in ChangeDataSource mantiene i livelli nel file spostandoli temporaneamente in un gruppo di livelli danneggiati. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Dovrebbe fare quello che vuoi. L'anno scorso ho avuto un problema simile e ho notato che c'era il plug-in ChangeDataSource che funzionava con i livelli ma non gestiva i livelli danneggiati. Ho detto che gestire i cattivi livelli sarebbe una grande caratteristica nei commenti sul blog dello sviluppatore (Enrico Ferreguti). Nel giro di una settimana l'aveva aggiunto!


Questo plugin non ha funzionato per me per gestire i layer danneggiati. Ho provato su due laptop diversi: uno con Win7 e l'altro con Win10. Entrambi hanno installato QGIS 2.18.0. Ho controllato "Gestisci layer danneggiati" e ho riavviato QGIS dopo l'installazione. L'impostazione predefinita di QGIS per la gestione dei layer non validi ha continuato a essere visualizzata, non la notifica del plug-in trovata e la gestione di origini dati non valide.
Aaron,

Non funziona neanche per me adesso. Lo farò sapere allo sviluppatore.
Baswein

Ho verificato che il plug-in changeDataSource funziona senza problemi. Risolvo alcune condizioni non rilevate generando eccezioni o segnalando errori falsi e mi impegno a repository una nuova versione. [Se i problemi persistono, segnalare] ( github.com/enricofer/changeDataSource/issues ) specificando i set di dati o le fasi operative per riprodurli.
Enrico Ferreguti,

Per far apparire il plugin devi avere Qgis in esecuzione e quindi aprire il progetto.
Baswein,
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.