使用 arcpy 剪辑管理创建 for 循环以处理文件中的多个栅格

Create for loop to process multiple rasters in a file using arcpy Clip management

我正在尝试使用 arcpy 剪辑管理工具创建一个 for 循环来处理(剪辑)一个文件中的多个光栅。我首先使用模型构建器在 arcmap 中创建一个具有正确参数的脚本。我导出了这个脚本,然后更新以添加一个循环来处理一个文件夹中的多个栅格。尝试 运行 时,我收到一个错误,提示 None 类型对象不可迭代。这是错误:
第 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))

您不能将模型构建器导出到 Python 并按原样使用它。

  1. ModelBuilder 中使用的动态 %Name% 符号在 Python 中无法识别。

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

  3. 此外,如@abarnet 所述,如果要遍历工作区中的所有栅格,for i in range(30): 行是无用的。

  4. 如果您使用 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 中提问。