RasterCellIterator

Краткая информация

Определяет объект итератора для итерации по ячейкам одного или нескольких растров.

Входные данные представляют собой словарь, содержащий один или несколько объектов Raster и, опционально, коэффициент отступа. Кроме того, можно также указать список объектов Raster, чьи ячейки NoData будут пропущены во время итерации.

Обсуждение

Объект RasterCellIterator перечисляет пары строк и столбцов для заданных объектов Raster в цикле. Пары строк и столбцов могут использоваться в индексной нотации [строка, столбец] с объектами Raster для чтения или записи значений ячеек.

Когда в итераторе используется несколько растров, первый растр в списке определяет среду анализа растров итератора. Ожидается, что все другие растры в списке будут совпадать по пространственной привязке, размеру ячейки и экстенту с таковой у первого растра. Если свойства второго и последующих растров в этом списке не совпадают с первым растром, к ним применяется среда анализа первого растра. Рекомендуется создать все выходные растры, используя объект RasterInfo первого растра, чтобы они наследовали его пространственную привязку, размер ячейки и экстент

См. Краткий обзор использования итератора ячеек растра для получения дополнительной информации о том, как использовать RasterCellIterator для выполнения пользовательского растрового анализа.

Синтаксис

RasterCellIterator (*args)
ПараметрОписаниеТип данных
*args

Словарь, определяющий растры и отступы в следующем формате: {'rasters': [in_rasterobj1, in_rasterobj2, ...], 'padding': padding_factor, 'skipNoData': [in_rasterobj1, in_rasterobj2, ...]}

Ключ rasters выражается как список объектов Raster. Каждый объект Raster должен быть экземпляром класса arcpy.Raster.

Опционный ключ padding выражается в виде целого числа. Коэффициент отступа расширяет внутренний блок пикселов растрового объекта на указанное значение.

Опционный ключ skipNoData выражается в виде списка растров, определяющих ячейки, которые будут пропущены итератором. Для любой заданной ячейки, если один или несколько растров в этом списке имеют значение NoData, эта ячейка будет пропущена итератором.

Растры в списке skipNoData должны быть поднабором или должны быть равны списку rasters.

Dictionary

Пример кода

RasterCellIterator, пример 1

Используйте 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, пример 2

Используйте 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, пример 3

Используйте 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")

Связанные разделы