Ich habe eine Handvoll von ungefähr 1000 Shapefiles, die beschädigt sind (siehe beigefügte Fehlermeldung). Die Shapefiles wurden von eCognition Developer 8 generiert. Es gibt ein Skript-Tool , das das Shapefile zu reparieren scheint, sobald es als beschädigt identifiziert wurde.
Bearbeiten:
Ich möchte ein schnelles Skript erstellen, um alle meine Shapefiles zu durchlaufen und zu überprüfen, ob die Anzahl der Shapes mit den Tabellendatensätzen übereinstimmt. Ich kann Tabellendatensätze wie folgt zählen:
# Name: fcCount.py
# Purpose: calculate the number of features in a featureclass
# Import system modules
import arcpy
from arcpy import env
env.workspace = "C:/data"
Sample = "MyShp.shp"
result_dbf = int(arcpy.GetCount_management(Sample).getOutput(0))
print result_dbf
Ich möchte letztendlich eine Art Logikprüfung erstellen, wie zum Beispiel:
if result_dbf = result_shp:
pass
else:
print "There is a problem with" + str(Sample)
Wie kann ich Formen direkt zählen, ohne auf die DBF-Datei zuzugreifen? Oder mit anderen Worten, wie lässt sich programmgesteuert am besten prüfen, ob die Anzahl der Formen mit der Anzahl der Tabellendatensätze übereinstimmt?
Antworten:
Was ist mit Pyshp ? Ich habe es mit pip installiert und was ich unten ausprobiert habe, ist ziemlich direkt aus der README :
Leider (oder vielleicht zum Glück?) Habe ich keine aufgebockten Shapefiles zum Testen, um zu sehen, ob nein. von Formen kann! = nein. von Aufzeichnungen.
Warten Sie nur eine Minute, dank Kirks Idee in den Kommentaren unten habe ich jetzt ein aufgebocktes Shapefile. Ich habe die Datenbank gesichert, eine Kopie des gesamten Shapefiles erstellt, einige Features gelöscht, dann die gesicherte Datenbank wieder in das Original umbenannt und siehe da, die Anzahl der Formen <Anzahl der Datensätze:
quelle
Nach dem Klang Ihrer Frage scheint alles, was Sie wirklich tun möchten, festzustellen, ob ein Shapefile Probleme damit hat oder nicht (in diesem Fall nicht übereinstimmende Datensätze). Wenn Sie nur diejenigen mit Problemen identifizieren müssen, müssen Sie die Datensätze in DBF und Shapefile nicht zählen, um festzustellen, ob sie fehlerhaft sind. Hier ist der Grund:
Wenn Sie versuchen, die GetCount-Funktion für ein Shapefile mit unterschiedlichen Datensatzzahlen auszuführen, schlägt der folgende Fehler fehl:
Da die GetCount-Funktion in diesem Szenario fehlschlägt und Sie nur die fehlerhaften Shapefiles identifizieren möchten, können Sie dies mit einer try / exception-Klausel in Ihrem Code abfangen, anstatt mit der if / else-Klausel, die Sie zuvor verwendet haben.
Ich habe mir erlaubt, den Code und die Schleife "List FeatureClasses" hinzuzufügen, damit Sie alle FCs in Ihrem Arbeitsbereich testen können, ohne sie manuell testen zu müssen.
quelle
Das Shapefile-Format ist dokumentiert. Ich würde vermuten, dass die Anzahl der Datensätze in der shp-Datei nicht der Anzahl der Datensätze in der DBF-Datei entspricht.
Das shp-Dateiformat ist hier dokumentiert . Sie können also ein Programm schreiben, um die Anzahl der Formen zu zählen. Das DBF-Format ist an vielen Stellen dokumentiert und Sie sollten in der Lage sein, Beispiele zum Zählen von Zeilen zu finden, z . B. hier .
quelle
Das angehängte Skript durchläuft ein Verzeichnis und prüft, ob die Anzahl der Formen mit der Anzahl der Datensätze für jedes Shapefile übereinstimmt.
quelle
Die Verwendung der Prüfgeometrie sollte Sie durch den ersten Schritt führen.
Mit Onus
Repair Geometry können Sie die Reihenfolge und Priorität des Problems auswählen, für das Sie das Problem beheben möchten.
Hier sind einige andere Links zu älteren Versionen . Wenn Sie Shapefile Checker ausführen, beenden Sie die Neuerstellung von dbf?
Dies ist der Schritt, mit dem die entsprechenden Datensätze erstellt werden. Eines von zwei Dingen ist aufgetreten, um den Fehler zu verursachen.
Dies kann durch verschiedene Dinge verursacht werden.
Das shx ist eigentlich der Index zwischen den beiden.
Das Zählen von Formen ohne Zählen von DBF-Datensätzen ist nur die halbe Lösung.
quelle
Im Wikipedia-Artikel zu Shapefiles sollte die .shx-Datei einen Index für die .shp-Datei enthalten, nicht für die .dbf-Datei. Daher muss möglicherweise überprüft werden, ob .shx und .shp zusammenpassen.
Es ist möglich, ein Shapefile ohne .dbf zu öffnen (dh Sie haben keine Attributtabelle), aber ein fehlerhafter Index generiert eine Fehlermeldung.
quelle