Python no puede leer el archivo de forma

11

Estoy tratando de abrir un archivo shape con el cuaderno Jupyter, pero no puedo abrirlo. El archivo de forma se encuentra en la misma carpeta que mi libro de trabajo, y Python no puede identificarlo incluso si uso la ruta completa.

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.

Abrirlo con fiona y geopandas tampoco funciona.

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

y

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

ambos terminan 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'

Sé que esto podría ser un problema trivial, pero soy nuevo en el uso de shapefiles y bibliotecas espaciales de Python, así que realmente no sé cómo solucionar este problema.

Leonard Shaw
fuente
reemplace el signo menos con un guión bajo y vuelva a intentarlo. Se supone que los nombres de los archivos de forma contienen letras, números y guiones bajos solamente . También sería una buena idea comenzar el nombre con una letra. Si el problema persiste, entonces el archivo de forma está probablemente dañado o falta el .SHX ... ¿tiene solo el archivo .SHP o tiene un conjunto completo de archivos (.SHP, .SHX, .DBF, .PRJ, etc.) )?
Michael Stimson el
Probablemente su archivo de forma esté corrupto. Guardo un archivo de formas arbitrario como 1-11-99n.shp y no tuve ningún problema con cualquiera de sus mini scripts con shapely, fiona o geopandas.
xunilk
3
Sí, el problema era que no incluía los otros archivos shx, dbf, etc. que necesitaba. Nunca he usado archivos shp antes, así que no sabía que requería el complemento de archivos. El nombre de archivo funcionó bien sin tener que cambiarlo. ¡Gracias!
Leonard Shaw
1
@LeonardShaw Considere proporcionar una respuesta a su pregunta para que podamos considerar esta pregunta resuelta.
Aaron
Para reiterar, es una violación de la especificación del archivo de forma tener un guión numérico o guión en el nombre del archivo. Es una buena práctica evitar los nombres que causarán fallas en algunas implementaciones de lectores de archivos de forma.
Vince

Respuestas:

20

Hay una trampa para los usuarios nuevos de shapefiles. El archivo de forma real (.shp) es inútil sin los archivos complementarios: .dbf, .shx, .prj, etc.

Esto se describe en la especificación técnica del archivo de forma, pero es un poco avanzado, el artículo de Esri podría ser más adecuado para una explicación rápida.

Es fundamental que todos los archivos que pertenecen a un archivo de forma se traten como una sola unidad. Si el archivo de forma se edita en cualquier etapa, incluso solo los cambios de atributo, los FID (identificadores de características) cambian, lo que significa que el orden en el archivo .DBF cambia ... si edita los atributos de un archivo de forma y solo copia el archivo .DBF, sobrescribir un archivo existente .DBF las formas van a apuntar a las filas equivocadas. Copie siempre TODOS los archivos juntos .

Al enviar un archivo shape por correo electrónico, Dropbox, Google Drive, etc., me parece conveniente comprimir todos los archivos en un solo archivo para que, cuando se descomprima, todos los archivos asociados aparezcan juntos.

Michael Stimson
fuente
1
Para ser más precisos: .shp, .dbf y .shx son el mínimo absoluto (de acuerdo con el estándar). QGIS / OGR le permitirá abrir archivos con un .dbf faltante, pero no podrá eliminar ni editar esas características. Sin embargo, puede usar ogr2ogr para crear el archivo dbf faltante (con una tabla de atributos vacía)
LuWi
2
@LuWi incluso el archivo .SHX se puede reconstruir, es el índice espacial, hay algunas herramientas y opciones que pueden reconstruir el índice espacial a partir de las formas existentes. El número exacto de archivos relacionados varía, pero siempre es mejor mantener todo junto.
Michael Stimson el
0

Si el único elemento que tiene es el archivo .shp, y puede hacerlo sin las otras partes, considere esta solución, abrir y guardar desde OpenJump. /gis//a/306228 Es posible que aún necesite un archivo .proj, según su propósito, pero puede salirse con una copia "estándar" copiada de otro proyecto y renombrada para que coincida con su shapefile , si eso usa la misma proyección.

Mark Neal
fuente