Я новичок в Python геопространственного программирования. я запустил следующий скрипт и получил соответствующее сообщение об ошибке
>>> 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
файл.Ответы:
В сущности, в Python говорят, что ваша попытка открыть шейп-файл не удалась. Когда что-то вроде osgeo.ogr.Open () завершается ошибкой, обычно возвращается None, который, в вашем случае, присваивается вашей переменной "shapefile". Когда вы позже попытаетесь получить доступ к шейп-файлу, он сообщит вам, что шейп-файл - это «NoneType» (а не тип объекта, который должен был создать osgeo) и что у объектов NoneType нет метода GetLayerCount.
Как вы это исправите? Во-первых, проверьте ошибки в своем коде - это даст вам лучшие сообщения. Что-то вроде:
Итак, теперь нам нужно ответить на вопрос, почему ваш шейп-файл не загружается. Я предполагаю, что вам нужно указать полный путь (например, "C: \ Users ... \ tl_2009_us_state.shp"), потому что osgeo не может найти ваш шейп-файл с указанным в данный момент путем. Это догадка, хотя.
источник
@ Ник отвечает правильно: «NoneType» означает, что источник данных не может быть открыт. OGR (и GDAL) не вызывают исключений там, где они обычно должны, и, к сожалению
ogr.UseExceptions()
, похоже, не делают ничего полезного. Вот мой обычный блок кода, чтобы вызвать правильные исключения:источник
Я сталкивался с этой ошибкой раньше и застрял с ней так долго. Я получил его на работу с помощью другого шейп-файла. Шейп-файл US Tiger должен быть поврежден или что-то в этом роде. Я использую gdal1.6 здесь.
источник