创建for循环以使用arcpy剪辑管理

时间:2015-05-05 02:43:58

标签: python arcpy

我正在尝试使用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))

1 个答案:

答案 0 :(得分:1)

您无法将ModelBuilder导出到Python并按原样使用它。

  1. 模型构建器中使用的动态%Name%符号将无法在Python中识别。

  2. 您必须在运行ListRasters函数之前定义感兴趣的工作区(检查其语法here)。

  3. 另外,正如@abarnet所提到的,如果你想循环工作区中的所有栅格,for i in range(30):行是没用的。

  4. 如果使用shapefile作为剪裁几何体,则无需在Clip工具中指定rectangle参数。

  5. 所以你的代码应该是这样的:

    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中询问他们。