Soy nuevo en la programación geoespacial de Python. ejecuté el siguiente script y obtuve el mensaje de error correspondiente
>>> 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
archivo.Respuestas:
Básicamente, lo que esto está diciendo, en Python, es que su intento de abrir el archivo de forma falló. Cuando algo como osgeo.ogr.Open () falla, generalmente devuelve None, que, en su caso, se asigna a su variable "shapefile". Cuando intente acceder a shapefile más tarde, le indica que shapefile es "NoneType" (en lugar del tipo de objeto que osgeo habría creado) y que los objetos NoneType no tienen el método GetLayerCount.
¿Cómo arreglas esto? Primero, pruebe los errores en su código; le dará mejores mensajes. Algo como:
Entonces, ahora debemos responder a la pregunta de por qué su archivo de forma no se está cargando. Supongo que debe proporcionar la ruta totalmente calificada (es decir, "C: \ Users ... \ tl_2009_us_state.shp") porque osgeo no puede encontrar su shapefile con la ruta actualmente proporcionada. Eso es un presentimiento sin embargo.
fuente
La respuesta de @ Nick es correcta: "NoneType" significa que no se pudo abrir la fuente de datos. OGR (y GDAL) no generan excepciones donde deberían hacerlo normalmente, y desafortunadamente
ogr.UseExceptions()
no parece hacer nada útil. Aquí está mi bloque de código habitual para generar las excepciones adecuadas:fuente
He encontrado este error antes y me he quedado atascado durante tanto tiempo. Lo puse a trabajar usando un shapefile diferente. El archivo de forma de tigre de EE. UU. Debe haberse dañado o algo así. Estoy usando gdal1.6 aquí.
fuente