使用 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 并按原样使用它。
ModelBuilder 中使用的动态 %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 中提问。
我正在尝试使用 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 并按原样使用它。
ModelBuilder 中使用的动态
%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 中提问。