Wie ignoriere ich "Umgang mit schlechten Ebenen" in QGIS?

11

Ich habe ein QGIS-Projekt (2.14.3-Essen), das ich sowohl bei der Arbeit als auch zu Hause verwende. Ich behalte alle bis auf zwei Ebenen mit dem Projekt.

Die beiden verbleibenden Schichten sind sehr groß - ein DEM und ein Hillshade mit einer Gesamtgröße von mehr als 20 GB - und werden bei der Arbeit und zu Hause auf unterschiedlichen Pfaden gespeichert.

Ich möchte den Handle Bad LayersDialog ignorieren und die unterbrochenen Pfade für diese Ebenen beibehalten. Es ist mir oft egal, dass sie schlecht sind; Ich möchte Änderungen an anderen Teilen des Projekts vornehmen.

Gibt es eine Möglichkeit, das Dialogfeld "Schlechte Ebenen behandeln" zu ignorieren oder zu überspringen, damit ich den Verweis auf die Ebenen nicht verliere, wenn ich sie nicht aktualisiere?

Aaron
quelle
Dies sollte in QGIS vorgelagert gelöst werden. Es wäre nicht sehr schwer zu tun. Ich würde empfehlen, dieses Problem im Upstream zu beheben (z. B. zusätzliche Optionen im Dialogfeld: a) in dieser Sitzung ausblenden b) Quellpfad korrigieren c) Ebene entfernen). Es gibt viele Unternehmen , die dies gerne für Sie tun.
Matthias Kuhn
1
@Matthias Kuhn - Das ist eine sehr gute Idee, das wäre ein guter Weg nach vorne. Ich benutze eine der Beratungsfirmen auf dieser Liste (nicht sicher, ob es das Richtige ist, sie zu benennen?). Ich werde die Möglichkeit mit ihnen untersuchen. Danke
Martin Hügi
@ MartinHügi hast du dabei Fortschritte gemacht? Ähnliches löste eine
Matthias Kuhn
Nein, ich habe dies nicht weiterentwickelt, ich hatte es tatsächlich vergessen, da es nur eines der Dinge geworden ist, mit denen wir leben. Vielen Dank für die Erinnerung, ich kann die Frage an unsere Beratung stellen oder ist sie bereits im Gange? @ Aaron - Wie hat das für dich geklappt?
Martin Hügi
Ich benutze weiterhin meine Workaround. Zwei parallele QGIS-Projekte - eines für die Arbeit und eines für zu Hause.
Aaron

Antworten:

4

Erstellen Sie einfach separate Kopien aus Ihrer Projektdatei für den privaten und beruflichen Gebrauch.

Von Ihnen gespeicherte Daten werden in die Layer-Quelldateien und nicht in die Projektdatei geschrieben.

Sobald Sie den Hausaufgaben-Teil beendet haben, können Sie ihn zur Arbeit bringen und die fehlerhaften Ebenen erneut hinzufügen. Wenn Sie Schwierigkeiten beim Stylen von Ebenen haben, können Sie diese separat speichern und auch hinzufügen.


Eine andere Möglichkeit besteht darin, eine VRT-Datei um die externe Quelle zu wickeln.

Ein Beispielbeispiel für eine Geotif-Rasterdatei, erstellt mit 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>

und ein Beispiel für ein Shapefile:

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

Wenn die Quelldateien nicht vorhanden sind, wird das Raster als schwarzes Quadrat angezeigt (Sie können die Ebene möglicherweise unsichtbar machen), und die Vektorebene wird ohne Fehlermeldungen zu einer Tabelle ohne Geometrie. Zusätzliche Nicht-VRT-Ebenen mit nicht entfernten Quelldateien bleiben erhalten und können bearbeitet werden. Wenn Sie die Quelldateien neu installieren, ist alles wieder normal, auch die Änderungen an den anderen Ebenen.

AndreJ
quelle
1
In diesem speziellen Fall ist es eine anständige Lösung, getrennte Projekte für Heim und Büro zu erstellen. Es gibt jedoch andere Fälle, z. B. wenn ein Kartendienst vorübergehend nicht verfügbar ist und Sie die Benachrichtigung über fehlerhafte Ebenen ignorieren möchten. Also frage ich noch einmal: Gibt es eine Möglichkeit, den Dialog "Schlechte Ebenen behandeln" zu ignorieren oder zu überspringen, damit bestimmte Ebenen nicht verloren gehen?
Aaron
Können Sie weitere Details zu VRT-Dateien angeben, was diese sind und wie Sie beginnen? Nach dem, was ich untersucht habe, gelten VRTs nur für Raster? Was ist mit Vektordateien oder Remote-PostGIS-Ebenen, die nicht verfügbar sind, wenn keine Verbindung besteht? Wie können Sie diese "Schlechten Ebenen behandeln" ignorieren?
Martin Hügi
@ MartinHügi Sie können auch VRT für Vektordateien erstellen, dies erfordert jedoch noch Handarbeit: gdal.org/drv_vrt.html und paolocorti.net/2012/03/08/gdal_virtual_formats . Ich werde meine Antwort bald um einige Beispiele erweitern.
AndreJ
@AndreJ Vielen Dank, wenn ich mir diese Links ansehe, ist mein begrenztes Verständnis, dass eine XML-Datei als Zwischenzuordnung zur Datenquelle fungiert. QGIS "denkt" also, dass es da ist, auch wenn die Datenquelle nicht verfügbar ist? GDAL ist etwas, von dem es so aussieht, als wäre es gut, sich damit auseinanderzusetzen oder zumindest ein Verständnis dafür zu haben.
Martin Hügi
Ja, Sie täuschen nur den QGIS-Fehlerbehandler.
AndreJ
3

Eine mögliche Lösung besteht darin, Ihre qgs-Projektdatei mithilfe eines Skripts zu ändern. Ich habe festgestellt, dass beim Ersetzen der Datenquelle das Popup " <datasource>.</datsource>Schlechte Ebenen behandeln" ignoriert wird.

Python-Skript wird ausgeführt, wenn Sie bestimmte Ebenen nicht laden möchten.

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

Auszuführendes Python-Skript zum Einfügen des entsprechenden Datenquellenpfads.

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

Auf diese Weise können Sie ein DoNotLoad.pymit dem obersten Skript und ein home.pymit Pfaden zu Ihren Heimquellen und ein work.pymit Pfaden zu Ihren Arbeitsquellen einrichten, indem Sie das zweite Skript als Muster verwenden.

Sie müssen dann an einem einzelnen Projekt arbeiten, aber Sie können Ihre Pfade je nach Umgebung, in der Sie sich befinden, problemlos ändern oder die Pfade so ändern, dass die Ebenen nicht geladen werden, sondern sich noch in Ihrem Projekt befinden (Ihr gesamtes Styling wird gespeichert und ich denke, Sie können sogar das Styling ändern, wenn Sie möchten. Es wird nur nichts in der Karte angezeigt.

TJ Rockefeller
quelle
Vielen Dank. Ich verstehe das Konzept, ich muss jetzt ganz klar die Zeit verbringen, die ich beabsichtigt hatte, um herumzukommen, um die grundlegende Verwendung von Python zu verstehen. Im Moment erhalte ich das Konzept, weil ich die project.qgs manuell mit WordPad bearbeitet habe, um die Datenquelle zu ändern, und sie zurück geändert habe. QGIS hat die fehlerhaften Ebenen des Handles nicht ignoriert, aber da die <ID> als Platzhalter fungiert, konnte ich zurückgehen und meine Änderung zurücksetzen. Also ja, das verstehe ich - denke ich.
Martin Hügi
Ich denke, dies ist ein guter Ort, um wiki.python.org/moin/BeginnersGuide
Martin Hügi
@ MartinHügi Wenn es hilft, habe ich das Hauptmuster für mein Skript aus dieser Stackoverflow-Antwort erhalten. Stackoverflow.com/a/290494/4708150 Dies erklärt die Logik des Skripts ausführlicher. Schauen Sie sich unbedingt die Kommentare an. Es gibt einen am besten bewerteten Kommentar, der erklärt, warum am Ende der Druckanweisung ein Komma steht.
TJ Rockefeller
1

Das ChangeDataSource-Plugin behält die Ebenen in der Datei bei, indem es sie vorübergehend in eine Gruppe mit fehlerhaften Ebenen verschiebt. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Es sollte tun, was Sie wollen. Letztes Jahr hatte ich ein ähnliches Problem und bemerkte, dass es das ChangeDataSource-Plugin gab, das mit Ebenen funktionierte, aber keine schlechten Ebenen behandelte. Ich erwähnte, dass der Umgang mit schlechten Ebenen eine großartige Funktion in den Kommentaren im Blog des Entwicklers (Enrico Ferreguti) wäre. Innerhalb einer Woche hatte er es hinzugefügt!

Baswein
quelle
Dieses Plugin hat bei mir nicht funktioniert, um mit schlechten Ebenen umzugehen. Ich habe zwei verschiedene Laptops ausprobiert - einen mit Win7 und einen mit Win10. In beiden ist QGIS 2.18.0 installiert. Ich habe "Schlechte Ebenen behandeln" aktiviert und QGIS nach der Installation neu gestartet. Die QGIS-Standardeinstellung für die Behandlung fehlerhafter Ebenen wurde weiterhin angezeigt, nicht die Benachrichtigung des Plugins, dass ungültige Datenquellen gefunden und verarbeitet wurden.
Aaron
Ich arbeite momentan auch nicht für mich. Ich werde den Entwickler wissen lassen.
Baswein
Ich habe überprüft, dass das changeDataSource-Plugin ohne Probleme ausgeführt wird. Ich behebe einige nicht erfasste Bedingungen, die Ausnahmen auslösen oder falsche Fehler melden, und verpflichte mich, eine neue Version zu speichern. [Wenn Ihre Probleme weiterhin bestehen, melden Sie dies bitte] ( github.com/enricofer/changeDataSource/issues ) und geben Sie Datensätze oder die Arbeitsschritte an, um sie zu reproduzieren.
Enrico Ferreguti
Damit das Plugin angezeigt wird, muss Qgis ausgeführt und das Projekt geöffnet werden.
Baswein