2014-08-27 7 views
0

Привет, У меня очень минимальный опыт работы с python, и я не уверен, почему я получаю ошибку этого типа. Я пытаюсь выполнить преобразование растра в полигон с растрами из другого рабочего пространства, чем исходное env.workspace. Это возможно? И как может быть отсутствие ошибки данных в Raster2 Listasters()?ListRasters, TypeError: объект «NoneType» не итерируется

Команда reclassify отлично работает и создает результат в определенной папке, но инструмент растра для многоугольника - это то, что сигнализирует об ошибке.

Спасибо за помощь Мне нужно это сделать для работы как можно скорее.

Здесь ошибка:

Traceback (most recent call last): 
    File "C:\Users\mkelly\Documents\Namibia\Raster_Water\Script_try2.py", line 30, in <module> 
    for raster2 in arcpy.ListRasters(): 
TypeError: 'NoneType' object is not iterable 

Вот код:

# Import arcpy module 
import arcpy 
from arcpy import env 

arcpy.env.overwriteOutput = True 

# Check out any necessary licenses 
arcpy.CheckOutExtension("3D") 

#Set the workplace 
arcpy.env.workspace = r"C:\Users\mkelly\Documents\Namibia\Raster_Water\1993" 

#for all files in 1993, reclassify to water only rasters 
for raster in arcpy.ListRasters(): 
    folder = r"C:\Users\mkelly\Documents\Namibia\Raster_Water\1993\Reclass" + "\\" 
    outraster = folder + raster 
    arcpy.Reclassify_3d(raster, "Value", "1 1", outraster, "NODATA") 

#Can I set up a new env workspace to get reclassified rasters from "Reclass" folder? 
arcpy.env.workspace = r"C:Users\mkelly\Documents\Namibia\Raster_Water\1993\Reclass" 

#for all files in 1993\Reclass, perform RastertoPolygon 
for raster2 in arcpy.ListRasters(): 
    folder2 = r"C:\Users\mkelly\Documents\Namibia\Raster_Water\1993\Polygons" + "\\" 
    outraster2 = folder2 + raster2 
    arcpy.RasterToPolygon_conversion(raster2, outraster2, "NO_SIMPLIFY", "VALUE") 

print "end Processing..."` 

Спасибо заранее к любому, кто может дать рекомендации или предложения!

+0

'arcpy.ListRasters()' возвращает 'None', это ваша проблема. Я уверен, что функция ожидает некоторые параметры. – poke

+0

Хорошо, спасибо. Я попробовал это, и он говорит, что «Все» не определено, поэтому, возможно, мне нужно определить его где-то еще – mk24

ответ

0

arcpy.ListRasters() не принимает никаких обязательных аргументов, см. help page. Вы уверены, что есть какие-либо растры в папке Reclass? Успешно ли они созданы Reclassify_3d? Я предполагаю, что outraster не совсем понятен, поскольку вы комбинируете одиночную и двойную обратную косую черту в пути. Вместо этого напишите outraster = os.path.join(folder, raster) и import os в начале вашего скрипта.

Кроме того, сценарий будет иметь проблемы с созданием многоугольников, потому что raster2, вероятно, что-то вроде raster.tiff или raster.jpg. Вы используете это, чтобы назвать свой выходной файл формы. Если у ваших растров есть расширение, вы должны обрезать его, например, arcpy.Describe(raster).baseName. И в любом случае добавьте .shp при сохранении вывода в папке.

EDIT: Существует опечатка во втором рабочем пространстве, вы забыли \ после C в r"C:Users\mkelly\Documents\Namibia\Raster_Water\1993\Reclass". Неправильное рабочее пространство, поэтому ваш список растров пуст.

В каком формате представлены ваши растры? Расширение (например, '.tiff') будет использоваться во имя выходного файла формы, поэтому вам нужно его удалить. Это то, что я подразумеваю под «обрезкой». И вы должны добавить '.shp'.

+0

Привет, GISGe, большое вам спасибо за вашу помощь. В папке Reclass есть растры, я могу открыть их и Arcmap, и они выглядят так, как должны. Я также попытался добавить outraster = os.path.join (папка, растр) с импортом os, как вы и предполагали, но я все еще получаю ошибку «NoneType» для raster2 в arcpy.ListRasters («", "All") линия. – mk24

+0

Я не совсем понимаю, что вы имеете в виду, обрезая расширение, но мои файлы - 13 символов (включая путь, строку, год и юлианскую дату), поэтому я не могу добавить никаких расширений, или я получаю ошибку, слишком долго. Вот почему я добавляю выходы к новым папкам, а не просто добавляю расширение «_poly» и сохраняю их в той же папке, что и оригинал. Я попробовал arcpy.Describe (растр) .baseName и теперь получаю новую ошибку. – mk24

+0

См. Отредактированный ответ – GISGe

Смежные вопросы