Saya baru mengenal pemrograman geospasial python. saya menjalankan skrip berikut dan mendapatkan pesan kesalahan yang sesuai
>>> import osgeo
>>> import osgeo.ogr
>>> shapefile = osgeo.ogr.Open("tl_2009_us_state.shp")
>>> numLayers = shapefile.GetLayerCount()
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
numLayers = shapefile.GetLayerCount() AttributeError: 'NoneType' object has no attribute 'GetLayerCount'
tl_2009_us_state.shp
file.Jawaban:
Jadi pada dasarnya, apa yang dikatakannya, dengan Python, adalah bahwa usaha Anda untuk membuka shapefile gagal. Ketika sesuatu seperti osgeo.ogr.Open () gagal, biasanya mengembalikan None, yang, dalam kasus Anda, akan ditugaskan ke variabel "shapefile" Anda. Saat Anda mencoba mengakses shapefile nanti, ia memberi tahu Anda bahwa shapefile adalah "NoneType" (bukan tipe objek yang akan dibuat osgeo) dan bahwa objek NoneType tidak memiliki metode GetLayerCount.
Bagaimana kamu memperbaiki ini? Pertama, uji kesalahan dalam kode Anda - itu akan memberi Anda pesan yang lebih baik. Sesuatu seperti:
Jadi, sekarang kita perlu menjawab pertanyaan mengapa shapefile Anda tidak dimuat. Dugaan saya adalah bahwa Anda perlu memberikan path yang sepenuhnya memenuhi syarat (yaitu, "C: \ Users ... \ tl_2009_us_state.shp") karena osgeo tidak dapat menemukan shapefile Anda dengan path yang saat ini disediakan. Tapi itu firasat.
sumber
@Jawaban Nick benar: "NoneType" berarti bahwa sumber data tidak dapat dibuka. OGR (dan GDAL) tidak menaikkan pengecualian di mana mereka biasanya harus, dan sayangnya
ogr.UseExceptions()
tampaknya tidak melakukan sesuatu yang berguna. Ini adalah blok kode saya yang biasa untuk benar-benar meningkatkan pengecualian yang tepat:sumber
Saya telah menemukan kesalahan ini sebelumnya dan telah terjebak dengannya begitu lama. Saya membuatnya bekerja dengan menggunakan shapefile yang berbeda. Shapefile US Tiger pasti rusak atau apalah. Saya menggunakan gdal1.6 di sini.
sumber