Je suis nouveau dans la programmation géospatiale en python. j'ai exécuté le script suivant et obtenu le message d'erreur correspondant
>>> 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
fichier.Réponses:
Donc, fondamentalement, ce que cela signifie, en langage Python, c'est que votre tentative d'ouverture du fichier de formes a échoué. Quand quelque chose comme osgeo.ogr.Open () échoue, il retourne généralement None, qui, dans votre cas, est assigné à votre variable "shapefile". Lorsque vous essayez d'accéder ensuite au fichier de formes plus tard, il vous indique que le fichier de formes est "NoneType" (plutôt que le type d'objet qu'osgeo aurait créé) et que les objets NoneType n'ont pas la méthode GetLayerCount.
Comment réparez-vous ceci? Tout d'abord, testez les erreurs dans votre code - cela vous donnera de meilleurs messages. Quelque chose comme:
Donc, maintenant nous devons répondre à la question de savoir pourquoi votre fichier de formes ne se charge pas. Je suppose que vous devez fournir le chemin d'accès complet (par exemple, "C: \ Users ... \ tl_2009_us_state.shp") car osgeo ne peut pas trouver votre fichier de formes avec le chemin d'accès actuellement fourni. C'est un pressentiment cependant.
la source
@ La réponse de Nick est correcte: "NoneType" signifie que la source de données n'a pas pu être ouverte. OGR (et GDAL) ne soulèvent pas d'exceptions là où ils devraient normalement, et
ogr.UseExceptions()
ne semblent malheureusement rien faire d'utile. Voici mon bloc de code habituel pour lever les exceptions appropriées:la source
J'ai rencontré cette erreur auparavant et je suis resté avec elle pendant si longtemps. Je l'ai fait fonctionner en utilisant un fichier de formes différent. Le fichier de formes US Tiger doit avoir été corrompu ou quelque chose. J'utilise gdal1.6 ici.
la source