Python kann kein Shapefile lesen

11

Ich versuche, ein Shapefile mit Jupyter-Notizbuch zu öffnen, aber ich kann es nicht zum Öffnen bringen. Das Shapefile befindet sich im selben Ordner wie meine Arbeitsmappe, und Python kann es nicht identifizieren, selbst wenn ich den vollständigen Pfad verwende.

import shapefile as shp
import matplotlib.pyplot as plt

sf = shp.Reader(r'C:\Users\Public\Documents\1-11-99n.shp')

ShapefileException: Unable to open C:\Users\Public\Documents\1-11-99n.dbf or C:\Users\Public\Documents\1-11-99n.shp.

Das Öffnen mit Fiona und Geopandas funktioniert ebenfalls nicht.

import fiona
shape = fiona.open("1-11-99n.shp")

und

import geopandas as gp
shp = gp.GeoDataFrame.from_file('1-11-99n.shp')
print (shp)

beide enden mit

CPLE_OpenFailedError: b'Unable to open 1-11-99n.shx or 1-11-99n.SHX.Try --config SHAPE_RESTORE_SHX true to restore or create it'

Ich weiß, dass dies ein triviales Problem sein könnte, aber ich bin neu in der Verwendung von Shapefiles und räumlichen Python-Bibliotheken, sodass ich wirklich nicht weiß, wie ich dieses Problem umgehen soll.

Leonard Shaw
quelle
ersetzen Sie das Minus mit einem Unterstrich und versuchen Sie es erneut .. Shape - Datei - Namen sollen Buchstaben, Zahlen und Unterstrichen enthalten nur . Es wäre auch eine gute Idee, den Namen mit einem Buchstaben zu beginnen. Wenn das Problem weiterhin besteht, ist das Shapefile wahrscheinlich beschädigt oder die .SHX fehlt. Haben Sie nur die .SHP-Datei oder haben Sie einen vollständigen Satz von Dateien (.SHP, .SHX, .DBF, .PRJ usw.) )?
Michael Stimson
Wahrscheinlich ist Ihr Shapefile beschädigt. Ich speichere ein beliebiges Shapefile als 1-11-99n.shp und hatte kein Problem mit irgendwelchen Ihrer Mini-Skripte mit Shapely, Fiona oder Geopandas.
Xunilk
3
Ja, das Problem war, dass ich die anderen benötigten shx-, dbf- usw. Dateien nicht aufgenommen habe. Ich habe noch nie SHP-Dateien verwendet, daher wusste ich nicht, dass dafür die Ergänzung von Dateien erforderlich ist. Der Dateiname funktionierte einwandfrei, ohne geändert werden zu müssen. Vielen Dank!
Leonard Shaw
1
@LeonardShaw Bitte geben Sie eine Antwort auf Ihre Frage, damit wir diese Frage als gelöst betrachten können.
Aaron
Um es noch einmal zu wiederholen: Es verstößt gegen die Shapefile-Spezifikation, wenn der Dateiname eine führende Zahl oder einen Bindestrich enthält. Es wird empfohlen, Namen zu vermeiden, die bei einigen Shapefile-Reader-Implementierungen zu Fehlern führen.
Vince

Antworten:

20

Es gibt eine Falle für Erstbenutzer von Shapefiles. Das eigentliche Shapefile (.shp) ist ohne die Begleitdateien nutzlos: .dbf, .shx, .prj etc ..

Dies ist in der technischen Spezifikation des Shapefiles beschrieben, aber das ist etwas fortgeschritten. Der Esri-Artikel ist möglicherweise besser für eine schnelle Erklärung geeignet.

Es ist wichtig, dass alle Dateien, die zu einem Shapefile gehören, als eine Einheit behandelt werden. Wenn das Shapefile zu irgendeinem Zeitpunkt bearbeitet wird, auch wenn sich nur Attribute ändern, ändern sich die FIDs (Feature-IDs). Dies bedeutet, dass die Reihenfolge in der DBF-Datei geändert wird. Sollten Sie die Attribute eines Shapefiles bearbeiten und nur die DBF-Datei kopieren, Überschreiben einer vorhandenen DBF - Datei die Formen wird darauf auf die falschen Zeilen. Kopieren Sie immer ALLE Dateien zusammen .

Wenn Sie ein Shapefile per E-Mail, Dropbox, Google Drive usw. senden, ist es zweckmäßig, alle Dateien in ein einziges Archiv zu komprimieren, damit beim Entpacken alle zugehörigen Dateien zusammen angezeigt werden.

Michael Stimson
quelle
1
Genauer gesagt: .shp, .dbf und .shx sind das absolute Minimum (gemäß Standard). Mit QGIS / OGR können Sie Dateien mit einer fehlenden DBF öffnen, diese Funktionen können Sie jedoch nicht löschen oder bearbeiten. Sie können jedoch ogr2ogr verwenden, um die fehlende DBF-Datei (mit einer leeren Attributtabelle) zu erstellen
LuWi
2
@LuWi sogar die .SHX-Datei kann neu erstellt werden, es ist der räumliche Index, es gibt einige Werkzeuge und Optionen, die den räumlichen Index aus den vorhandenen Formen neu erstellen können. Die genaue Anzahl der zugehörigen Dateien variiert, aber es ist immer am besten, alles zusammen zu halten .
Michael Stimson
0

Wenn das einzige Element, das Sie haben, die .shp-Datei ist und Sie auf die anderen Teile verzichten können, ziehen Sie diese Lösung in Betracht, indem Sie sie in OpenJump öffnen und speichern. /gis//a/306228 Abhängig von Ihrem Zweck benötigen Sie möglicherweise noch eine .proj-Datei, können jedoch möglicherweise eine "Standard" -Datei verwenden, die aus einem anderen Projekt kopiert und entsprechend Ihrem Shapefile umbenannt wurde , wenn das die gleiche Projektion verwendet.

Mark Neal
quelle