Python ne peut pas lire le fichier de formes


11

J'essaie d'ouvrir un fichier de formes avec le bloc-notes Jupyter, mais je n'arrive pas à l'ouvrir. Le fichier de formes se trouve dans le même dossier que mon classeur et Python ne peut pas l'identifier même si j'utilise le chemin complet.

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.

L'ouvrir avec fiona et géopandas ne fonctionne pas non plus.

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

et

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

les deux se retrouvent avec

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'

Je sais que cela pourrait être un problème trivial, mais je suis nouveau dans l'utilisation des fichiers de formes et des bibliothèques spatiales Python, donc je ne sais vraiment pas comment contourner ce problème.


remplacez le moins par un trait de soulignement et réessayez. Les noms de fichiers de formes sont censés contenir uniquement des lettres, des chiffres et des traits de soulignement . Ce serait également une bonne idée de commencer le nom par une lettre. Si le problème persiste, alors le fichier de formes est probablement corrompu ou le .SHX est manquant. Avez-vous juste le fichier. )?
Michael Stimson

Votre fichier de formes est probablement corrompu. J'ai enregistré un fichier de formes arbitraire sous la forme 1-11-99n.shp et je n'ai eu aucun problème avec vos mini-scripts avec shapely, fiona ou geopandas.
xunilk

3
Oui, le problème était que je n'ai pas inclus les autres fichiers shx, dbf, etc. dont j'avais besoin. Je n'ai jamais utilisé de fichiers shp auparavant, donc je ne savais pas que cela nécessitait le complément de fichiers. Le nom de fichier a bien fonctionné sans avoir à être changé. Merci!
Leonard Shaw

1
@LeonardShaw Veuillez envisager de répondre à votre question afin que nous puissions considérer cette question comme résolue.
Aaron

Pour réitérer, c'est une violation de la spécification du fichier de formes d'avoir un premier chiffre ou un trait d'union dans le nom de fichier. Il est préférable d'éviter de nommer ce qui entraînera des échecs dans certaines implémentations de lecteur de fichiers de formes.
Vince

Réponses:


20

Il existe un piège pour les nouveaux utilisateurs de fichiers de formes. Le fichier de formes réel (.shp) est inutile sans les fichiers associés: .dbf, .shx, .prj etc.

Ceci est décrit dans la spécification technique du fichier de formes mais c'est un peu avancé, l' article Esri pourrait être plus approprié pour une explication rapide.

Il est essentiel que tous les fichiers appartenant à un fichier de formes soient traités comme une seule unité. Si le fichier de formes est modifié à n'importe quel stade, même juste des changements d'attributs, les FID (identificateurs de fonctionnalités) changent, ce qui signifie que l'ordre dans le fichier .DBF est modifié. Si vous modifiez les attributs d'un fichier de formes et copiez uniquement le fichier .DBF, écrasant un fichier .DBF existant, les formes pointeront vers les mauvaises lignes. Copiez toujours TOUS les fichiers ensemble .

Lors de l'envoi d'un fichier de formes par e-mail, Dropbox, Google Drive, etc.


1
Pour être plus précis: .shp, .dbf et .shx sont le minimum absolu (selon la norme). QGIS / OGR vous permettra d'ouvrir des fichiers avec un .dbf manquant, mais vous ne pourrez pas supprimer ou modifier ces fonctionnalités. Vous pouvez cependant utiliser ogr2ogr pour créer le fichier dbf manquant (avec une table attributaire vide)
LuWi

2
@LuWi même le fichier .SHX peut être reconstruit, c'est l'index spatial, il y a quelques outils et options qui peuvent reconstruire l'index spatial à partir des formes existantes. Le nombre précis de fichiers associés varie, mais il est toujours préférable de tout garder ensemble.
Michael Stimson

0

Si le seul élément que vous avez est le fichier .shp et que vous pouvez vous passer des autres parties, envisagez cette solution, en ouvrant et en enregistrant depuis OpenJump. /gis//a/306228 Vous pouvez toujours avoir besoin d'un fichier .proj, selon votre objectif, mais vous pourrez peut-être vous en tirer avec un fichier "standard" copié à partir d'un autre projet et renommé pour correspondre à votre fichier de formes , si cela utilise la même projection.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.