Python tidak dapat membaca shapefile


11

Saya mencoba membuka shapefile dengan notebook Jupyter, tetapi saya tidak bisa membuatnya terbuka. Shapefile terletak di folder yang sama dengan buku kerja saya, dan Python tidak dapat mengidentifikasi bahkan jika saya menggunakan path lengkap.

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.

Membuka dengan fiona dan geopanda juga tidak berfungsi.

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

dan

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

keduanya berakhir dengan

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'

Saya tahu ini mungkin masalah sepele, tapi saya baru menggunakan shapefile dan perpustakaan Python spasial jadi saya benar-benar tidak tahu bagaimana mengatasi masalah ini.


ganti minus dengan garis bawah dan coba lagi .. nama shapefile yang seharusnya berisi huruf, angka dan garis bawah hanya . Ini juga merupakan ide yang baik untuk memulai nama dengan huruf. Jika masalah tetap ada maka shapefile mungkin rusak atau .SHX hilang .. apakah Anda hanya memiliki file .SHP atau apakah Anda memiliki set lengkap file (.SHP, .SHX, .DBF, .PRJ dll. )?
Michael Stimson

Mungkin shapefile Anda rusak. Saya menyimpan satu shapefile sewenang-wenang sebagai 1-11-99n.shp dan saya tidak memiliki masalah dengan skrip mini apa pun Anda dengan shapely, fiona, atau geopanda.
xunilk

3
Ya masalahnya adalah bahwa saya tidak menyertakan file shx, dbf, dll. Lain yang saya butuhkan. Saya belum pernah menggunakan file shp sebelumnya jadi saya tidak tahu bahwa itu memerlukan komplemen file. Nama file berfungsi dengan baik tanpa harus diubah. Terima kasih!
Leonard Shaw

1
@LeonardShaw Harap pertimbangkan memberikan jawaban untuk pertanyaan Anda sehingga kami dapat mempertimbangkan pertanyaan ini diselesaikan.
Aaron

Untuk mengulangi, itu merupakan pelanggaran dari spesifikasi shapefile untuk memiliki angka atau tanda hubung utama dalam nama file. Ini adalah praktik terbaik untuk menghindari penamaan yang akan menyebabkan kegagalan dalam beberapa implementasi pembaca shapefile.
Vince

Jawaban:


20

Ada jebakan untuk pengguna pertama kali shapefile. Shapefile yang sebenarnya (.shp) tidak berguna tanpa file pendamping: .dbf, .shx, .prj dll.

Ini diuraikan dalam spesifikasi teknis shapefile tapi itu agak maju, artikel Esri mungkin lebih cocok untuk penjelasan cepat.

Sangat penting bahwa semua file milik shapefile diperlakukan sebagai satu unit. Jika shapefile diedit pada tahap apa pun, bahkan perubahan atribut saja, FID (pengidentifikasi fitur) berubah, yang berarti urutan dalam file .DBF diubah .. jika Anda mengedit atribut shapefile dan hanya menyalin file .DBF, menimpa file .DBF yang ada bentuknya akan menunjuk ke baris yang salah. Selalu salin SEMUA file bersama .

Saat mengirim shapefile melalui email, Dropbox, Google Drive, dll. Saya merasa perlu untuk zip semua file menjadi arsip tunggal sehingga ketika membuka ritsleting semua file terkait muncul bersama-sama.


1
Untuk lebih tepatnya: .shp, .dbf, dan .shx adalah minimum absolut (sesuai standar). QGIS / OGR akan memungkinkan Anda untuk membuka file dengan .dbf yang hilang, tetapi Anda tidak akan dapat menghapus atau mengedit fitur-fitur itu. Anda dapat, bagaimanapun, menggunakan ogr2ogr untuk membuat file dbf yang hilang (dengan tabel atribut kosong)
LuWi

2
@LuWi bahkan file .SHX dapat dibangun kembali, ini adalah indeks spasial, ada beberapa alat dan opsi yang dapat membangun kembali indeks spasial dari bentuk yang ada. Jumlah pasti dari file terkait bervariasi tetapi selalu yang terbaik untuk menjaga semuanya tetap bersama.
Michael Stimson

0

Jika satu-satunya item yang Anda miliki adalah file .shp, dan Anda dapat melakukannya tanpa bagian lain, pertimbangkan solusi ini, membuka dan menyimpan dari OpenJump. /gis//a/306228 Anda mungkin masih memerlukan file .proj, tergantung pada tujuan Anda, tetapi mungkin bisa lolos dengan "standar" yang disalin dari proyek lain dan diganti namanya agar sesuai dengan shapefile Anda , jika itu menggunakan proyeksi yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.