Python şekil dosyasını okuyamıyor


11

Jupyter notebook ile bir şekil dosyası açmaya çalışıyorum, ancak açamıyorum. Şekil dosyası, çalışma kitabımla aynı klasörde bulunuyor ve tam yolu kullansam bile Python bunu tanımlayamıyor.

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.

Fiona ve geopandas ile açmak da işe yaramıyor.

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

ve

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

her ikisi de ile biter

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'

Bunun önemsiz bir sorun olabileceğini biliyorum, ancak şekil dosyaları ve uzamsal Python kitaplıkları kullanmaya yeni başladım, bu yüzden bu soruna nasıl çalışacağımı gerçekten bilmiyorum.


eksi bir alt çizgi ile değiştirin ve tekrar deneyin .. şekil dosyası adları yalnızca harf, sayı ve alt çizgi içermelidir . Adı bir harfle başlatmak da iyi bir fikir olacaktır. Sorun devam ederse, şekil dosyası büyük olasılıkla bozuktur veya .SHX eksiktir. Yalnızca .SHP dosyanız var mı veya tam dosya kümeniz var mı (.SHP, .SHX, .DBF, .PRJ vb.). )?
Michael Stimson

Muhtemelen şekil dosyanız bozuk. 1-11-99n.shp olarak rasgele bir şekil dosyası kaydediyorum ve düzgün, fiona veya geopandas ile mini komut dosyalarınızla ilgili herhangi bir sorunum olmadı.
xunilk

3
Evet sorun ben ihtiyacım diğer shx, dbf, vb dosyaları içermiyordu oldu. Daha önce hiç shp dosyaları kullanmadım, bu yüzden dosyaların tamamlanması gerektiğini bilmiyordum. Dosya adı değiştirilmeden iyi çalıştı. Teşekkürler!
Leonard Shaw

1
@LeonardShaw Bu sorunun çözüldüğünü düşünebilmemiz için lütfen sorunuzun yanıtını vermeyi düşünün.
Aaron

Tekrarlamak için, dosya adında önde gelen bir sayısal veya kısa çizgi olması şekil dosyası belirtiminin ihlalidir. Bazı şekil dosyası okuyucu uygulamalarında hatalara neden olacak adlandırmadan kaçınmak en iyi uygulamadır.
Vince

Yanıtlar:


21

İlk kez şekil dosyası kullanıcıları için bir tuzak var. Gerçek şekil dosyası (.shp), eşlik dosyaları olmadan işe yaramaz: .dbf, .shx, .prj vb.

Bu şekil dosyası teknik şartnamesinde özetlenmiştir, ancak bu biraz ileri düzeydir , Esri makalesi hızlı bir açıklama için daha uygun olabilir.

Şekil dosyasına ait tüm dosyalara tek bir birim gibi davranılması çok önemlidir. Şekil dosyası herhangi bir aşamada düzenlenmişse, yalnızca öznitelik değişiklikleri bile olsa, FID'ler (özellik tanımlayıcıları) değişir, bu da .DBF dosyasındaki sıralamanın değiştiği anlamına gelir. şekiller varolan .DBF dosyası olacak üzerine yazılmasını işaret yanlış satırlara. Her zaman TÜM dosyaları birlikte kopyalayın .

E-posta, Dropbox, Google Drive vb. Yoluyla bir şekil dosyası gönderirken, tüm dosyaları tek bir arşive sıkıştırmayı uygun buluyorum, böylece sıkıştırıldığında tüm ilişkili dosyalar birlikte görünecek.


1
Daha kesin olmak gerekirse: .shp, .dbf ve .shx mutlak minimumdur (standarda göre). QGIS / OGR, .dbf dosyası eksik olan dosyaları açmanıza izin verir, ancak bu özellikleri silemez veya düzenleyemezsiniz. Ancak, eksik dbf dosyasını (boş bir öznitelik tablosu ile) oluşturmak için ogr2ogr komutunu kullanabilirsiniz
LuWi

2
@LuWi bile .SHX dosyası yeniden oluşturulabilir, bu mekansal dizin, mekansal dizini mevcut şekillerden yeniden oluşturabilecek birkaç araç ve seçenek var. İlgili dosyaların kesin sayısı değişir, ancak her şeyi bir arada tutmak her zaman en iyisidir .
Michael Stimson

0

Sahip olduğunuz tek öğe .shp dosyasıysa ve diğer bölümler olmadan yapabiliyorsanız, OpenJump'ı açıp kaydederek bu çözümü göz önünde bulundurun. https://gis.stackexchange.com/a/306228 Amacınıza bağlı olarak yine de bir .proj dosyasına ihtiyacınız olabilir, ancak başka bir projeden kopyalanan ve şekil dosyanızla eşleşecek şekilde yeniden adlandırılan "standart" bir dosyadan kurtulabilirsiniz. , aynı projeksiyonu kullanıyorsa.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.