RasterCellIterator
汇总
定义迭代器对象,以迭代一个或多个栅格的像元。
输入是包含单个或多个 Raster 对象(并可选择包含填充因子)的字典。此外,还可以指定迭代期间将被跳过其 NoData 像元的 Raster 对象列表。
讨论
RasterCellIterator 对象将枚举循环中给定 Raster 对象的行和列对。行和列对可在 [行,列] 指数记法中与 Raster 对象搭配使用,以读取或写入像元值。
在迭代器中使用多个栅格时,列表中的第一个栅格将定义迭代器的栅格分析环境。列表中的所有其他栅格都应在空间参考、像元大小和范围方面与第一个栅格相匹配。如果此列表中第二个栅格及后续栅格的属性与第一个栅格不匹配,则系统会将第一个栅格的分析环境应用于它们。建议您使用第一个栅格的 RasterInfo 对象来创建所有输出栅格,以便这些输出栅格继承其空间参考、像元大小和范围。
有关如何使用 RasterCellIterator 执行自定义栅格分析的详细信息,请参阅 使用栅格像元迭代器的快速浏览 。
语法
RasterCellIterator(*args)
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
*args |
按照以下格式定义栅格和填充的字典:
可选的 可选的
|
Dictionary |
代码示例
使用 RasterCellIterator 从输入栅格读取每个像元值并将其写入输出栅格,从而将栅格移动一个像元。
# Import system modules
import arcpy
from arcpy.sa import *
# Create inRaster raster object
inRaster = arcpy.Raster("C:/arcpyExamples/inputs/elevation.tif")
# Get the raster info object from inRaster
rasInfo = inRaster.getRasterInfo()
# Create a new raster dataset
outRaster = arcpy.Raster(rasInfo)
# The following code shifts inRaster by one cell and writes to outRaster
with arcpy.sa.RasterCellIterator({"rasters":[inRaster, outRaster], "padding":1}) as rci:
for r, c in rci:
# Read cell value from inRaster (at upper left corner of the current location)
v = inRaster[r-1, c-1]
# Check for NoData
if math.isnan(v):
# Write NoData to outRaster
outRaster[r, c] = math.nan
else:
# Write v to outRaster
outRaster[r, c] = v
# Save the output
outRaster.save("C:/arcpyExamples/outputs/outras01.tif")
使用 RasterCellIterator 将行(或列)号分配给新栅格上的每个像元。
# Import system modules
import arcpy
from arcpy.sa import *
# Create a raster info object
rasInfo = arcpy.RasterInfo()
# Create a spatial reference object
spRef = arcpy.SpatialReference(32145)
# Create an extent object
ext = arcpy.Extent(471090.082572495, 208342.353396819, 494670.082572495, 231352.353396819, 0, 0, 0, 0, spRef)
# Initialize raster info object properties
# Set the spatial reference property
rasInfo.setSpatialReference(spRef)
# Set the extent property
rasInfo.setExtent(ext)
# Set the cell size property
rasInfo.setCellSize((30, 30))
# Set the pixel type property
rasInfo.setPixelType("S32")
# Create a new raster dataset
outRaster = arcpy.Raster(rasInfo)
# The following code will create a row (or column) raster
with RasterCellIterator({"rasters":[outRaster], "padding":1}) as rci:
for r, c in rci:
# Assign 'r' to outRaster will result in a row raster
# Assign 'c' to outRaster will result in a column raster.
outRaster[r, c] = r
# Save the output
outRaster.save("C:/arcpyExamples/outputs/outras02.tif")
使用 RasterCellIterator 获取流的流向。
# Import system modules
import arcpy
from arcpy.sa import *
# Create inRaster raster object
inStreamRas = arcpy.Raster("C:/arcpyExamples/inputs/streamras.tif")
inFlowDirRas = arcpy.Raster("C:/arcpyExamples/inputs/flowdir.tif")
# Get the raster info object from inRaster
rasInfo = inFlowDirRas.getRasterInfo()
# Create a new raster dataset
outRaster = arcpy.Raster(rasInfo)
# Get flow directions along a stream network
with arcpy.sa.RasterCellIterator({"rasters":[inStreamRas, inFlowDirRas, outRaster], "padding":1, "skipNoData":[inStreamRas]}) as rci:
for r, c in rci:
v = inFlowDirRas[r, c]
outRaster[r, c] = v
# Save the output
outRaster.save("C:/arcpyExamples/outputs/outras03.tif")