Python não pode ler shapefile


11

Estou tentando abrir um shapefile com o notebook Jupyter, mas não consigo abri-lo. O shapefile está localizado na mesma pasta da minha pasta de trabalho e o Python não pode identificá-lo, mesmo que eu use o caminho 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.

Abri-lo com fiona e geopandas também não funciona.

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)

ambos acabam com

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'

Sei que esse pode ser um problema trivial, mas sou novo no uso de shapefiles e bibliotecas espaciais de Python, por isso realmente não sei como solucionar esse problema.


substituir a menos com um sublinhado e tente novamente .. nomes shapefile devem conter letras, números e sublinhados apenas . Também seria uma boa idéia começar o nome com uma letra. Se o problema persistir, o shapefile provavelmente está corrompido ou o .SHX está ausente .. você possui apenas o arquivo .SHP ou possui um conjunto completo de arquivos (.SHP, .SHX, .DBF, .PRJ etc. )?
Michael Stimson

Provavelmente o seu shapefile está corrompido. Salvei um shapefile arbitrário como 1-11-99n.shp e não tive nenhum problema com nenhum dos seus mini scripts com shapely, fiona ou geopandas.
xunilk

3
Sim, o problema era que eu não incluí os outros arquivos shx, dbf etc. que eu precisava. Eu nunca usei arquivos shp antes, então não sabia que era necessário o complemento de arquivos. O nome do arquivo funcionou bem sem precisar ser alterado. Obrigado!
amigos estão dizendo sobre leonard

1
@LeonardShaw Por favor, considere fornecer uma resposta para sua pergunta para que possamos considerá-la resolvida.
Aaron

Para reiterar, é uma violação da especificação shapefile ter um numérico ou hífen à esquerda no nome do arquivo. É uma prática recomendada evitar nomes, o que causará falhas em algumas implementações de leitores de shapefile.
Vince

Respostas:


20

Existe uma armadilha para os usuários iniciantes de shapefiles. O arquivo shapefile real (.shp) é inútil sem os arquivos complementares: .dbf, .shx, .prj etc.

Isso está descrito na especificação técnica shapefile, mas um pouco avançado, o artigo da Esri pode ser mais adequado para uma explicação rápida.

É fundamental que todos os arquivos pertencentes a um shapefile sejam tratados como uma única unidade. Se o shapefile for editado em qualquer estágio, mesmo que apenas as alterações de atributo, os FIDs (identificadores de recurso) são alterados, o que significa que a ordem no arquivo .DBF é alterada. Você deve editar os atributos de um shapefiles e copiar apenas o arquivo .DBF, sobrescrever um arquivo DBF existente as formas irá apontar para as linhas erradas. Sempre copie TODOS os arquivos juntos .

Ao enviar um shapefile por email, Dropbox, Google Drive etc., acho conveniente compactar todos os arquivos em um único arquivo, para que, quando descompactado, todos os arquivos associados apareçam juntos.


1
Para ser mais preciso: .shp, .dbf e .shx são o mínimo absoluto (de acordo com o padrão). O QGIS / OGR permitirá abrir arquivos com um .dbf ausente, mas você não poderá excluir ou editar esses recursos. Você pode, no entanto, usar ogr2ogr para criar o arquivo dbf ausente (com uma tabela de atributos vazia)
LuWi

2
@LuWi até o arquivo .SHX pode ser reconstruído, é o índice espacial, existem algumas ferramentas e opções que podem reconstruir o índice espacial a partir das formas existentes. O número exato de arquivos relacionados varia, mas é sempre melhor manter tudo junto.
Michael Stimson

0

Se o único item que você possui é o arquivo .shp, e você pode ficar sem as outras partes, considere esta solução, abrindo e salvando no OpenJump. /gis//a/306228 Você ainda pode precisar de um arquivo .proj, dependendo da sua finalidade, mas pode conseguir um "padrão" copiado de outro projeto e renomeado para corresponder ao seu shapefile , se isso usar a mesma projeção.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.