Wie vermeide ich, dass während der Bearbeitung beschädigte Shapefiles erstellt werden?

15

Ich habe einen meiner GIS-Techniker, der einige Zeilen in QGIS im Shapefile-Format digitalisiert. Ich weiß nicht, wie er es gemacht hat (und er auch nicht), aber irgendwie wurde das Shapefile korrupt. Es wurden zufällige Linien erzeugt, oder einige der Linien, die er erstellt hatte, verschwanden einfach. Ich habe in ArcCatalogue nachgesehen, wie es in ArcGIS aussah, und Folgendes habe ich gesehen:

Bildbeschreibung hier eingeben

Beachten Sie das Fragezeichensymbol, auf dem ein Shapefile-Liniensymbol angezeigt werden soll. Offensichtlich kann ArcCatalogue diese Datei nicht lesen. Außerdem schien eine zweite DBF-Datei mit dem angehängten '_packed' erstellt worden zu sein. Wenn ich mir das Shapefile mit dem Windows Explorer ansehe, sehe ich, dass es bereits eine DBF für das Shapefile 'M3_PRE_SMU_lines_10Apr13_SMC.dbf' gibt. Daher weiß ich nicht, woher dieses gepackte Shapefile stammt, und ich kann nichts online finden das spricht dafür.

Ich habe versucht, diese Datei zu ArcMap hinzuzufügen, und habe den folgenden Fehler erhalten:

Bildbeschreibung hier eingeben

Der Fehler ist ziemlich selbsterklärend ... Die Anzahl der Formen stimmt nicht mit der Anzahl der Datensätze überein. Ich weiß nur nicht, warum das passiert. Es scheint nichts online zu geben, das erklärt, wie dies in QGIS vor sich geht, aber ich sehe ein paar Reparaturwerkzeuge. Ich habe das selbst repariert, indem ich einfach QGIS geöffnet, die Ebene hinzugefügt und dann mit der rechten Maustaste auf die Ebene geklickt und als weiteres Shapefile gespeichert habe. Also habe ich mir eine Lösung ausgedacht, aber ich hoffe, eine Lösung zu finden, die das erst gar nicht mehr vorkommt. Danke, Mike

Mike
quelle
1
Ich benutze QGIS seit Jahren und habe dieses Problem noch nie gesehen. Das "magische" Erscheinungsbild eines anderen DBF deutet darauf hin, dass das Shapefile außerhalb von QGIS manipuliert wurde. Wenn Sie den Fehler nur mit QGIS reproduzieren können, reichen Sie bitte einen Fehlerbericht ein. Das wäre sehr wichtig!
Underdunkel
Ich habe versucht, das Problem ohne Glück zu wiederholen. Was mir aufgefallen ist, ist, dass ich im Gegensatz zu ArcGIS beim Bearbeiten in QGIS keine Schemasperrnachricht erhalte (dh, wenn jemand eine Schemasperre für das Shapefile hat und Sie mit der Bearbeitung desselben beginnen, gibt ArcGIS beim Speichern einen Fehler aus Ich denke, dass es seltsam ist, wenn Sie ein Shapefile speichern, das durch ein Schema gesperrt ist. Ich bin nicht zu 100% sicher, dass dies die Ursache ist, aber etwas, das es wert ist, erwähnt zu werden.
Mike
Dieser Fehler ist auch beim Bearbeiten von Shapefiles aufgetreten. Meine Aufgabe bestand lediglich darin, die Bearbeitung in ArcMap durchzuführen. Offensichtlich ist das keine echte Lösung - aber Sie sind nicht allein, wenn es um diese Art von Fehler geht.
Kevin
Haben Sie versucht, die Datei ..._ SMC.dbf in ..._ SMC.dbf.backup und die Datei ..._ SMC_packed.dbf in ..._ SMC.dbf umzubenennen?
Matthias Kuhn
2
Hallo, das gleiche Problem mit Dufur. Dateien, die nur in der q gis-Umgebung erstellt wurden. Es passiert, wenn ich die Form bearbeite und zum Speichern gehe und dann die Bearbeitung beende, sodass die Linien verschwinden und die Attributtabelle scheinbar keine Daten enthält. Wenn Sie versuchen, die Form erneut auf das QGIS zu laden, sieht es leer aus. Im Ordner befindet sich die Datei. Aus mario.shx war ein mario_packed.shp geworden. Nach dem Löschen des Wortes aus dem Namen (es ist wieder mario.shx) ist die Form nun geladen und scheint zu funktionieren. Wie lange? Ich weiß nicht, ich werde nur verrückt mit diesem
user27144

Antworten:

16

Erläuterung

OGR (Teil von GDAL) ist die Bibliothek, mit der QGIS auf Shapefiles zugreift. Wenn OGR Features löscht, werden diese nicht sofort gelöscht, sondern nur als gelöscht markiert. Hin und wieder wird ein Befehl namens repack ausgeführt, der eine neue Datei mit dem Suffix _repack erstellt und alle Features, die nicht als gelöscht markiert sind, in diese neue Datei kopiert. Sobald dies abgeschlossen ist, wird die ursprüngliche DBF durch die Datei _repack.dbf ersetzt. Das Shapefile wird dann auf die gleiche Weise bearbeitet: Erstellen Sie ein neues (_packed.shp), kopieren Sie alle nicht gelöschten Features und ersetzen Sie schließlich das ursprüngliche .shp.

Es scheint irgendwo in diesem Prozess etwas fehlgeschlagen zu sein (vielleicht ein Absturz?).

Während dieses Vorgangs ändern sich die Feature-IDs. Vermutlich verwenden shp (Geometrie) und dbf (Attributtabelle) unterschiedliche Feature-IDs für dieselben Features. Dies führt zu dem seltsamen Verhalten, das Sie feststellen. Es scheint, dass eine der beiden Dateien noch (einen Teil) der gelöschten Funktionen enthält, während die andere dies nicht tut.

Wie gehe ich damit um?

Update, Nov. 2016: GDAL 2.2 wird mit einer integrierten Funktion ausgeliefert, die das automatische Umpacken aufruft, sobald die Datei auf die Festplatte geschrieben wird. Bevor Sie etwas anderes tun, überprüfen Sie die GDAL-Version im QGIS-Info-Dialogfeld und aktualisieren Sie Ihre GDAL-Version (oft als Teil von QGIS geliefert) auf eine aktuelle Version.

Es gibt wahrscheinlich nicht viel, was Sie dagegen tun können, abgesehen von regelmäßigen Sicherungen, um nicht mehr Daten zu verlieren, als Sie verarbeiten können (tun Sie das trotzdem, oder? 😉). Und wenn Sie einen Weg finden, dies zu reproduzieren (am besten mit einem Beispieldatensatz), erstellen Sie einen Fehlerbericht .

Wenn dieses Problem erneut auftritt, können Sie auch versuchen , einen räumlichen Index für das Shapefile zu erstellen . In diesem Prozess ruft QGIS erneut das Repacken des Shapefiles auf und "repariert" möglicherweise das shp / dbf. Dies ist jedoch nur eine unbestätigte Vermutung.

Wie von @rhm und in den Kommentaren erwähnt, kann es auch hilfreich sein , die Datei {xyz} _packed. {Ext} in {xyz}. {Ext} umzubenennen . Wenn die gepackte Datei bereits vollständig geschrieben wurde und nur die Umbenennung fehlgeschlagen ist, ist es absolut gültig, diesen Schritt manuell auszuführen. Wenn die _packed-Datei jedoch nicht vollständig geschrieben wurde, fehlen möglicherweise Informationen in Teilen Ihrer Funktionen. Also , bevor Sie versuchen , diese Sicherungskopien aller beteiligten Dateien.

Hintergrundinformationen darüber, wann das Umpacken aufgerufen wird

Zwischen QGIS 2.0 und 2.8 wurde das Umpacken aufgerufen, wenn der Layer entladen wurde (QGIS beenden, anderes Projekt laden ...). Wenn ein Feature gelöscht oder eine Geometrie geändert wurde, waren SHP- und DBF-Dateien mit als gelöscht gekennzeichneten Datensätzen vorhanden.

Ab QGIS 2.10 wird repack immer dann aufgerufen, wenn der Layer nach einer Operation gespeichert wird, bei der möglicherweise das gelöschte Flag zu Datensätzen hinzugefügt wird. Daher sollten sich die Dateien jetzt immer in einem vernünftigen Zustand befinden, damit sie von anderen Anwendungen verarbeitet werden können.

Matthias Kuhn
quelle
1

Das ist mir in QGIS passiert. Ich habe es geschafft, das Problem einfach zu beheben, indem ich '_packed' aus dem Dateinamen gelöscht habe, wie jemand im obigen Kommentarabschnitt vorgeschlagen hat.

rhm
quelle
1

Möglicherweise ist dies ein weiteres Problem einer beschädigten .shx-Indexdatei. Der Geometrietyp sollte in den Kopfzeilen .shp und .shx gespeichert werden. Wenn sie nicht übereinstimmen, generiert die Software einen Fehler.

Es sieht so aus, als ob QGIS bei defekten Indexdateien nicht sehr streng ist und diese mit neu erstellen kann Save As..., während ARCGIS auf einer korrekten Indexdatei besteht und eine gepackte DBF (Attributtabelle) für die Features erstellt, die über die korrekten Teile der gefunden werden können Indexdatei oder möglicherweise ohne Verwendung des Index.

AndreJ
quelle
1

Das erneute Auftreten gelöschter Features und / oder ungewöhnliches Verhalten von Shapefiles, aus denen Features in QGIS gelöscht wurden, ist ein bekannter Fehler. Weitere Informationen hierzu finden Sie in diesem Fehlerbericht 11007 und in dieser verwandten Frage. Gelöschte Polygone scheinen auf ältere Versionen zurückzukehren . Wenn ArcGIS Probleme mit solchen Shapefiles hat und diese in QGIS als MapInfo-TAB-Dateien gespeichert werden, führt dies zum Absturz des MapInfo-RouteFinder-Plugins, es sei denn, die Tabellen werden vor dem Laden von RouteFinder zuerst in MapInfo gepackt. Das Ausführen von Universal Translator zum Konvertieren dieser beschädigten Shapefiles in MapInfo schlägt fehl.

Wie Sie festgestellt haben, kann das Problem durch Speichern unter in QGIS behoben werden.

SpatialSuccess
quelle