Python non è in grado di leggere shapefile


11

Sto cercando di aprire un file di forma con il notebook Jupyter, ma non riesco ad aprirlo. Lo shapefile si trova nella stessa cartella della mia cartella di lavoro e Python non può identificarlo anche se utilizzo il percorso completo.

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.

Anche aprirlo con Fiona e Geopandas non funziona.

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

e

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

entrambi finiscono con

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'

So che questo potrebbe essere un problema banale, ma sono nuovo nell'uso degli shapefile e delle librerie spaziali di Python, quindi non so davvero come aggirare questo problema.


sostituire il segno meno con un carattere di sottolineatura e riprovare .. nomi shapefile dovrebbero contenere lettere, numeri e underscore solo . Sarebbe anche una buona idea iniziare il nome con una lettera. Se il problema persiste, probabilmente il file di forma è corrotto o manca il file .SHX .. hai solo il file .SHP o hai un set completo di file (.SHP, .SHX, .DBF, .PRJ ecc. )?
Michael Stimson,

Probabilmente il tuo shapefile è corrotto. Salvo uno shapefile arbitrario come 1-11-99n.shp e non ho avuto alcun problema con qualunque dei tuoi mini script con ben fatto, fiona o geopandas.
xunilk,

3
Sì, il problema era che non includevo gli altri file shx, dbf, ecc. Di cui avevo bisogno. Non ho mai usato file shp prima d'ora, quindi non sapevo che richiedesse il complemento di file. Il nome file ha funzionato bene senza essere modificato. Grazie!
Leonard Shaw,

1
@LeonardShaw Ti preghiamo di considerare di fornire una risposta alla tua domanda in modo che possiamo considerare risolta questa domanda.
Aaron

Per ribadire, è una violazione della specifica dello shapefile avere un numero o trattino iniziale nel nome del file. È consigliabile evitare la denominazione che provocherà errori in alcune implementazioni del lettore di file di forma.
Vince il

Risposte:


20

C'è una trappola per i primi utenti di shapefile. Lo shapefile effettivo (.shp) è inutile senza i file di accompagnamento: .dbf, .shx, .prj ecc.

Questo è delineato nelle specifiche tecniche dello shapefile ma è un po 'avanzato, l' articolo Esri potrebbe essere più adatto per una rapida spiegazione.

È fondamentale che tutti i file appartenenti a un file di forma vengano trattati come una singola unità. Se lo shapefile viene modificato in qualsiasi fase, anche solo le modifiche agli attributi, cambiano i FID (identificatori di caratteristiche), il che significa che l'ordine nel file .DBF viene modificato .. se dovessi modificare gli attributi di uno shapefile e copiare solo il file .DBF, sovrascrivere un file .DBF esistente le forme verranno puntare alle righe sbagliate. Copia sempre TUTTI i file insieme .

Quando invio un file di forma tramite e-mail, Dropbox, Google Drive ecc. Trovo opportuno comprimere tutti i file in un singolo archivio in modo che quando viene decompresso tutti i file associati vengano visualizzati insieme.


1
Per essere più precisi: .shp, .dbf e .shx sono il minimo assoluto (secondo lo standard). QGIS / OGR ti permetterà di aprire i file con un .dbf mancante, ma non sarai in grado di eliminare o modificare quelle funzionalità. È possibile, tuttavia, utilizzare ogr2ogr per creare il file dbf mancante (con una tabella di attributi vuota)
LuWi

2
@LuWi anche il file .SHX può essere ricostruito, è l'indice spaziale, ci sono alcuni strumenti e opzioni che possono ricostruire l'indice spaziale dalle forme esistenti. Il numero preciso di file correlati varia ma è sempre meglio tenere tutto insieme.
Michael Stimson,

0

Se l'unico elemento che hai è il file .shp e puoi fare a meno delle altre parti, considera questa soluzione, aprendola e salvandola da OpenJump. /gis//a/306228 Potrebbe essere necessario un file .proj, a seconda del proprio scopo, ma potrebbe essere in grado di cavarsela con una "standard" copiata da un altro progetto e rinominata per adattarsi al proprio file di forma , se utilizza la stessa proiezione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.