Korrigiertes Shapefile reparieren?

10

Ich habe ein Shapefile, an dem ich in ArcGIS Desktop 9.3 gearbeitet habe, das irgendwie beschädigt ist, und es gibt den Fehler "Die Anzahl der Formen stimmt nicht mit der Anzahl der Tabellendatensätze überein." Was ich möchte, ist, dieses Shapefile wiederherzustellen, da es viele Änderungen enthält, die andere Revisionen der Datei nicht haben.

Früher habe ich diesen Fehler mit ogr2gui behoben, aber das Tool stürzt jetzt einfach ab. Ich habe sogar die Kommandozeilenversion ogr2ogr ausprobiert, aber immer noch kein Glück. Auch dieses Skript, das Shapefile Repair Tool von der ArcScripts-Website, hat nicht geholfen.

Irgendwelche Ideen? (außer dass ich keine Shapefiles mehr benutze)


Hier ist die Ausgabe von ogr2ogr (basierend auf einem Vorschlag in den Antworten): Geben Sie hier die Bildbeschreibung ein

Erick
quelle
1
Es wurde fast sicher beschädigt, weil seine Attributtabelle (eine DBF-Datei) separat bearbeitet wurde, was zu einer Inkonsistenz zwischen den Formdatensätzen und den Attributdatensätzen führte. Selbst wenn Sie es schaffen, das Shapefile zu "reparieren", sollten Sie sorgfältig prüfen, ob die richtigen Attribute mit den Shapes verknüpft sind!
whuber
Die Fehlermeldungen verraten viel. Diese Anzahl von Punkten und Teilen gibt Werte zwischen 2 ^ 30 und 2 ^ 32 (ohne Vorzeichen) an, was stark auf ein umfangreiches physisches Überschreiben von Datensatzheadern in der .shp-Datei selbst hinweist (da dies niemals gültige Zählungen wären). Es ist daher sehr wahrscheinlich, dass die Daten in diesen Datensätzen ebenfalls überschrieben wurden. Kurz gesagt, Ihre Formdaten sind wahrscheinlich nicht mehr vorhanden, zumindest in vielen Teilen der .shp-Datei, und können daher nicht per Software wiederhergestellt werden. Stellen Sie Ihre Backups wieder her und starten Sie von dort aus.
whuber
1
@whuber. Vielen Dank. Sicher ist der Fall. Jede aus diesem beschädigten Shapefile wiederhergestellte Datei enthält weit weniger Datensätze als meine Sicherung. Ich bin seitdem zum Backup zurückgekehrt.
Erick
Brad Nesoms Empfehlung shapeecheck.exe, hat meine beschädigte Formdatei zum ersten Mal repariert! tolles Werkzeug

Antworten:

8

Eine Option mit dem Verlust der beschädigten Funktionen könnte darin bestehen, ogr2ogr zu verwenden, um Ihr Shapefile mit der Option -skipfailures in ein anderes Shapefile zu konvertieren:

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

Weitere Details finden Sie in diesem Blogbeitrag des PerryGeo-Blogs:

http://www.perrygeo.net/wordpress/?p=132

Capooti
quelle
Führen Sie den Befehl aus (einschließlich -f "ESRI Shapefile", das Sie ausgelassen haben). Fehlerbericht in der Datei. [Screenshot kann hier nicht gepostet werden]. Es hat mit den Formen der Täter zu tun, denke ich. Das Format lautet: FEHLER 1: Beschädigte .shp-Datei: Form 2352, nPoints = 7, nEntitySize = 88.
Erick
Sie können die Option -f sicher entfernen: Shapefile ist das Standardausgabeformat. Für weitere Nachforschungen wäre es interessant, wenn Sie eine Kopie des Shapefiles anhängen könnten
Capooti
Datei für die Recherche: Ich hätte die Datei gerne weitergeleitet, aber leider sind die Daten urheberrechtlich geschützt. Danke trotzdem.
Erick
@Erick, wenn Sie den Screenshot auf imgur.com setzen, kann ich ihn hier posten (falls noch relevant)
djq
5

Ich benutze diesen. Es hat dieses Problem für mich immer behoben.

shapeecheck.exe

Brad Nesom
quelle
Ich stimme Brad zu, ShapeCheck funktioniert einfach - Standalone korrigiert Shapefiles - schneidet bei Bedarf ab.
Mapperz
@ Mapperz. Lief das Werkzeug mit mehreren Kürzungen. Könnte tatsächlich das Shapefile danach öffnen! Aber es enthält jetzt weniger Datensätze als das Backup, auf das ich zurückgreifen muss. Wenn ich kein Backup hätte, wäre es eine solche Wiederherstellung gewesen. (Archivierungswerkzeug für alle Fälle) Danke.
Erick
4

Die offizielle Antwort von Esri enthält eine Reihe von Tipps, verweist Sie jedoch auf das Hilfsprogramm für die Reparatur von SHPs , mit dem ich ein paar Mal gefeuert wurde.

Nur wenige andere, von denen ich gehört habe, aber nicht sagen kann, dass ich es versucht habe:

Simon
quelle
Danke Simon. Aber mein Hauptproblem ist, dass ich die Datei nicht für den Anfang öffnen kann, so dass die meisten Vorschläge nicht funktionieren. Habe gerade alles auf Tipp Eins ausprobiert, was du vorgeschlagen hast. Nichts hat geklappt.
Erick
2

Ok, hier ist ein weiterer Trick, den Sie dem Stapel guter Antworten oben hinzufügen können.

Dies ist ein bisschen brutaler, meistens hilft es, manchmal nicht, und obwohl es wahrscheinlich nur ein erster Schritt zur Behebung des Problems ist (und keine Lösung für sich selbst, die es oft nicht ist), kann es helfen Bringen Sie Sie dorthin, wo Sie das Shapefile öffnen können. In den meisten Fällen müssen Sie nach dem Öffnen des Shapefiles noch weitere manuelle Reparaturen in ArcMap durchführen (beschädigte Funktionen, fehlende Attribute, falsch ausgerichtete Attribute usw.).

  1. Kopieren Sie das Shapefile in einen neuen leeren Ordner. Nehmen Sie nur SHP, SHX und DBF mit. Lassen Sie alle anderen Dateien zurück, und ja, das schließt den prj ein.

  2. (Windows): Klicken Sie mit der rechten Maustaste auf die SHX-Datei und wählen Sie "Eigenschaften", um die Dateieigenschaften zu öffnen.

  3. Sehen Sie sich auf der Registerkarte "Allgemein" die EXAKTE Dateigröße dieser SHX-Datei bis auf das Byte an. Sehen Sie sich die Eigenschaft "Größe" an und nicht die Eigenschaft "Größe auf Festplatte".

  4. Nehmen Sie diese Dateigröße in Bytes und subtrahieren Sie 100 Bytes (den Header). Teilen Sie den Rest durch 8 (die Größe jedes "Wortes"). Das Ergebnis gibt Ihnen die Anzahl der Formmerkmale im SHP-Teil des Shapefiles an.

  5. Öffnen Sie die DBF in einer Software, mit der Sie die DBF bearbeiten und wieder als DBF speichern können. Hinzufügen oder Entfernen von Datensätzen, damit die Zeilen in der DBF mit der Anzahl der Formmerkmale in dem SHP übereinstimmen, die Sie in Schritt 4 berechnet haben. (Wenn Sie eine ältere Version von Excel verwenden, denken Sie daran, dass Zeile 1 die Feldnamen enthält. Wenn Sie also 1.000 Datensätze verwenden, werden seit der ersten Datenzeile 1.001 Zeilen im Blatt angezeigt ist Zeile Nr. 2.) Wenn die Anzahl der Zeilen übereinstimmen soll, müssen Sie Zeilen löschen, und diese Zeilen enthalten echte Daten, die Sie behalten müssen. Speichern Sie diese einfach in einem neuen DBF, und Sie können das Zeug zurücklesen in später, wenn Sie den Punkt erreicht haben, an dem sich in ArcMap alles wieder öffnet.

  6. Versuchen Sie, das Shapefile in ArcMap erneut zu öffnen, nachdem Sie die obigen Schritte ausgeführt haben, um die Anzahl der Features im SHP mit der Anzahl der Zeilen im DBF abzugleichen.

JimBarry
quelle
1

Sie können versuchen, die Anzahl der Formen in Ihre .shp-Dateien mit ogrinfo zu zählen (nicht sicher, ob es funktioniert):

 ogrinfo -sql 'select count(*) from myshp' myshp.shp

Wenn Sie in der Lage sind, die Anzahl der Formen zu zählen, können Sie Ihre DBF- Datei mit Open Office öffnen, um sie zu vervollständigen (oder zusätzliche Zeilen entfernen).

simo
quelle
Vielen Dank für den Vorschlag, aber ich bin nicht gerade ein GDAL-Tool-Profi. oder 'sehr' SQL-Kenntnisse. Es wurde versucht, das Tool mit den von Ihnen angegebenen Parametern auszuführen, es wurde jedoch ein werkzeugbezogener Fehler angezeigt. "Datenquellenanzahl (*) kann nicht geöffnet werden".
Erick
Können Sie die Befehlszeile kopieren / einfügen?
Simo
Ich kann aber immer noch den gleichen Fehler machen. Aber @capootis Lösung scheint einige Ergebnisse / identifizierte Täterformen hervorgebracht zu haben.
Erick
1

Ich hatte etwas Glück beim Löschen der Indexdateien (.idx und .shx), die Ihr GIS bei erneuter Verbindung neu generiert.

Nate
quelle
Versuchte dies ohne Erfolg. Vielen Dank für Ihren Vorschlag.
Erick
0

Wenn Ihr Shapefile eine Punktebene war und XY-Feldwerte hatte, können Sie das Werkzeug XY-Ereignisebene erstellen ausführen, um eine weitere Ebene aus der beschädigten Shapefile-Datenbank zu erstellen.

Artwork21
quelle
Es ist eine Straßen (Polylinien) Datei. Beachten Sie jedoch Ihren Hinweis für ein Punkteszenario. Vielen Dank.
Erick