つまり、基本的に、これはPythonで言うと、シェープファイルを開く試みが失敗したということです。osgeo.ogr.Open()のようなものが失敗すると、通常はNoneを返します。この場合、Noneが変数「シェイプファイル」に割り当てられます。その後、シェープファイルにアクセスしようとすると、シェープファイルは(osgeoが作成するオブジェクトのタイプではなく)「NoneType」であり、NoneTypeオブジェクトにはメソッドGetLayerCountがないことがわかります。
これをどのように修正しますか?まず、コードのエラーをテストします。これにより、より適切なメッセージが得られます。何かのようなもの:
import osgeo
import osgeo.ogr
try:
shapefile = osgeo.ogr.Open("tl_2009_us_state.shp")
if shapefile: # checks to see if shapefile was successfully defined
numLayers = shapefile.GetLayerCount()
else: # if it's not successfully defined
print "Couldn't load shapefile"
except: # Seems redundant, but if an exception is raised in the Open() call,
# # you get a message
print "Exception raised during shapefile loading"
# if you want to see the full stacktrace - like you are currently getting,
# then you can add the following:
raise
したがって、シェープファイルがロードされない理由についての質問に答える必要があります。osgeoは現在提供されているパスでシェープファイルを見つけることができないため、完全修飾パス(つまり、「C:\ Users ... \ tl_2009_us_state.shp」)を指定する必要があると思います。でもそれは直感です。