Python không thể đọc shapefile


11

Tôi đang cố gắng mở một shapefile bằng notebook Jupyter, nhưng tôi không thể mở nó ra. Shapefile nằm trong cùng thư mục với sổ làm việc của tôi và Python không thể xác định nó ngay cả khi tôi sử dụng đường dẫn đầy đủ.

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.

Mở nó bằng fiona và geopandas cũng không hoạt động.

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

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

cả hai kết thúc với

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'

Tôi biết đây có thể là một vấn đề nhỏ, nhưng tôi chưa quen với việc sử dụng shapefiles và thư viện Python không gian nên tôi thực sự không biết cách khắc phục vấn đề này.


thay thế trừ với một dấu gạch dưới và thử lại .. tên shapefile có nghĩa vụ phải chứa các chữ cái, chữ số và dấu gạch chỉ . Nó cũng sẽ là một ý tưởng tốt để bắt đầu tên bằng một chữ cái. Nếu sự cố vẫn còn thì shapefile có thể bị hỏng hoặc .SHX bị thiếu .. bạn chỉ có tệp .SHP hay bạn có một bộ tệp đầy đủ (.SHP, .SHX, .DBF, .PRJ, v.v. )?
Michael Promotionson

Có lẽ shapefile của bạn bị hỏng. Tôi lưu một shapefile tùy ý là 1-11-99n.shp và tôi không gặp vấn đề gì với bất kỳ tập lệnh mini nào của bạn với hình dạng, fiona hoặc geopandas.
xunilk

3
Vâng, vấn đề là tôi đã không bao gồm các tệp shx, dbf, v.v. khác mà tôi cần. Tôi chưa bao giờ sử dụng tệp shp trước đây vì vậy tôi không biết rằng nó yêu cầu bổ sung các tệp. Tên tệp hoạt động tốt mà không phải thay đổi. Cảm ơn!
Leonard Shaw

1
@LeonardShaw Vui lòng xem xét việc cung cấp câu trả lời cho câu hỏi của bạn để chúng tôi có thể xem xét câu hỏi này được giải quyết.
Aaron

Để nhắc lại, việc vi phạm đặc tả shapefile là vi phạm số hoặc dấu gạch nối hàng đầu trong tên tệp. Cách tốt nhất là tránh đặt tên sẽ gây ra lỗi trong một số cài đặt trình đọc shapefile.
Vince

Câu trả lời:


20

Có một cái bẫy cho người dùng lần đầu sử dụng shapefiles. Shapefile thực tế (.shp) là vô dụng nếu không có các tệp đồng hành: .dbf, .shx, .prj, v.v.

Điều này được nêu trong đặc tả kỹ thuật shapefile nhưng đó là một chút nâng cao, bài viết Esri có thể phù hợp hơn để giải thích nhanh.

Điều quan trọng là tất cả các tệp thuộc về một shapefile được coi là một đơn vị. Nếu shapefile được chỉnh sửa ở bất kỳ giai đoạn nào, thậm chí chỉ thay đổi thuộc tính, FID (định danh tính năng) sẽ thay đổi, có nghĩa là thứ tự trong tệp .DBF bị thay đổi .. bạn có nên chỉnh sửa các thuộc tính của shapefiles và chỉ sao chép tệp .DBF, ghi đè một tệp .DBF hiện có, các hình dạng sẽ trỏ đến các hàng sai. Luôn sao chép TẤT CẢ các tệp với nhau .

Khi gửi một shapefile bằng email, Dropbox, Google Drive, v.v. Tôi thấy thật tiện lợi khi nén tất cả các tệp vào một kho lưu trữ để khi giải nén tất cả các tệp liên quan xuất hiện cùng nhau.


1
Nói chính xác hơn: .shp, .dbf và .shx là mức tối thiểu tuyệt đối (theo tiêu chuẩn). QGIS / OGR sẽ cho phép bạn mở các tệp bị thiếu .dbf, nhưng bạn sẽ không thể xóa hoặc chỉnh sửa các tính năng đó. Tuy nhiên, bạn có thể sử dụng ogr2ogr để tạo tệp dbf bị thiếu (với bảng thuộc tính trống)
LuWi

2
@LuWi thậm chí có thể xây dựng lại tệp .SHX, đó là chỉ mục không gian, có một số công cụ và tùy chọn có thể xây dựng lại chỉ mục không gian từ các hình dạng hiện có. Số lượng chính xác của các tệp liên quan khác nhau, nhưng tốt nhất là luôn giữ mọi thứ cùng nhau.
Michael Promotionson

0

Nếu mục duy nhất bạn có là tệp .shp và bạn có thể làm mà không cần các phần khác, hãy xem xét giải pháp này, mở và lưu từ OpenJump. /gis//a/306228 Bạn vẫn có thể cần một tệp .proj, tùy thuộc vào mục đích của bạn, nhưng có thể thoát khỏi một "tiêu chuẩn" được sao chép từ một dự án khác và đổi tên để khớp với shapefile của bạn , nếu điều đó sử dụng cùng một phép chiếu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.