我正在尝试使用arcpy剪辑管理工具创建一个for循环来处理(剪辑)一个文件中的多个栅格。我首先使用模型构建器在arcmap中使用正确的参数创建脚本。我导出了此脚本,然后更新以添加循环以处理文件夹中的多个栅格。尝试运行时,我收到一个无类型对象无法迭代的错误。这是错误:
第6行,在<module>
中
对于栅格列表中的栅格:
TypeError:'NoneType'对象不可迭代
import arcpy
texas_shp = "C:\\user\\Nicole\\data\\gis\\texas.shp"
tx__Name_ = "C:\\user\\Nicole\\date\\clippedimages\\tx_%Name%"
rasterlist = arcpy.ListRasters("C:\\user\\Nicole\\data\\gis\\imagestoclip")
for raster in rasterlist:
for i in range(30):
arcpy.Clip_management(raster, "-8492199.91815014 -8492199.91793823 1914766.86774716 1213815.0683878", tx__Name_, texas_shp, "-2147483647", "NONE", "NO_MAINTAIN_EXTENT")
print arcpy.AddMessage(arcpy.GetMessages(0))
答案 0 :(得分:1)
您无法将ModelBuilder导出到Python并按原样使用它。
模型构建器中使用的动态%Name%
符号将无法在Python中识别。
您必须在运行ListRasters函数之前定义感兴趣的工作区(检查其语法here)。
另外,正如@abarnet所提到的,如果你想循环工作区中的所有栅格,for i in range(30):
行是没用的。
如果使用shapefile作为剪裁几何体,则无需在Clip工具中指定rectangle
参数。
所以你的代码应该是这样的:
import arcpy, os
texas_shp = "C:\\user\\Nicole\\data\\gis\\texas.shp"
arcpy.env.workspace = "C:\\user\\Nicole\\data\\gis\\imagestoclip"
rasterlist = arcpy.ListRasters()
for raster in rasterlist:
tx_name = os.path.join("C:\\user\\Nicole\\date\\clippedimages", "tx_" + raster)
# If you want to maintain the clipping geometry:
arcpy.Clip_management(raster, "#", tx_name, texas_shp, "-2147483647", "ClippingGeometry", "NO_MAINTAIN_EXTENT")
# If you don't:
arcpy.Clip_management(raster, "#", tx_name, texas_shp, "-2147483647", "NONE", "NO_MAINTAIN_EXTENT")
如果您有其他与arcpy相关的问题,您可能需要在专用于GIS的gis.stackexchange.com中询问他们。