NumPyArrayToRaster

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

Конвертирует массив NumPy в растр.

Обсуждение

Размер и тип данных полученного набора растровых данных зависит от входного массива.

NumpyArrayToRaster Поддерживает прямое преобразование массива 2D NumPy в одноканальный растр или массива 3D NumPy в многоканальный растр.

NumpyArrayToRaster поддерживает прямое преобразование массива 3D NumPy в многомерный набор растровых данных или массива 4D NumPy в многомерный многоканальный набор растровых данных путем указания многомерной информации.

  1. Если входной растр имеет два измерения, то он возвращает одноканальный растр, где размер растра определяется измерениями (строки, столбцы).
  2. Если входной массив имеет три измерения, то он возвращает многоканальный растр, где число каналов равно длине первого измерения, и размер растра определяется вторыми и третьими измерениями (каналы, строки, столбцы).
    • Если входной массив имеет три измерения, и первое с размером 1, то он возвращает одноканальный растр.

Присутствие аргументов x_cell_size и y_cell_size позволяет поддерживать прямоугольные ячейки.

Примечание:

Размеры прямоугольных ячеек не поддерживаются для формата Esri Grid.

Эта функция учитывает следующие настройки среды геообработки:

Выходная система координат, Экстент, Растр привязки, Текущая рабочая область, Временная рабочая область

Синтаксис

NumPyArrayToRaster (in_array, {lower_left_corner}, {x_cell_size}, {y_cell_size}, {value_to_nodata}, {mdinfo})
ПараметрОписаниеТип данных
in_array

Массив NumPy, конвертируемый в растр. Требуется двух- или трехмерный массив NumPy.

NumPyArray
lower_left_corner

Объект Point, определяющий нижний левый угол выходного растра в единицах карты.

По умолчанию, нижний левый угол устанавливается с координатами (0.0, 0.0).

(Значение по умолчанию — None)

Point
x_cell_size

Размер ячейки в направлении x, заданный в единицах карты. Входными данными могут быть заданное значение размера ячейки (тип: с двойной точностью) или входной растр.

Когда набор данных задан, размер ячейки этого набора данных по оси x используется в качестве размера ячейки по оси x выходного растра.

Если задано только значение x_cell_size, без y_cell_size, то будет создана квадратная ячейка соответствующего размера.

Если ни значение x_cell_size, ни значение y_cell_size не заданы, то для размеров x и y ячейки будет использовано значение по умолчанию, равное 1,0.

(Значение по умолчанию — 1.0)

Double
y_cell_size

Размер ячейки в направлении y, заданный в единицах карты. Входными данными могут быть заданное значение размера ячейки (тип: с двойной точностью) или входной растр.

Когда набор данных задан, размер ячейки этого набора данных по оси x используется в качестве размера ячейки по оси y выходного растра.

Если задано только значение y_cell_size, без x_cell_size, то будет создана квадратная ячейка соответствующего размера.

Если ни значение x_cell_size, ни значение y_cell_size не заданы, то для размеров x и y ячейки будет использовано значение по умолчанию, равное 1,0.

(Значение по умолчанию — 1.0)

Double
value_to_nodata

Значение в массиве NumPy, которому в выходном растре будет присвоено значение NoData. Если для value_to_nodata значение не указано, в полученном растре значений NoData не будет.

(Значение по умолчанию — None)

Double
mdinfo

Строка или JSON, задающие переменные и измерения в многомерном наборе растровых данных, использующиеся для построения многомерной информации. Строка должна быть в следующем формате:

{"variables":[{"name": <variable_name>, "dimensions": [{"name": <dimension_name>, "description": <dimension_description>, "unit": <dimension_unit>, "extent": [<dimension_min>, <dimension_max>], "values": [<dimension_values>,…]},…]}, …]}

(Значение по умолчанию — None)

String
Возвращаемое значение
Тип данныхОписание
Raster

Выходной растр.

Пример кода

NumPyArrayToRaster пример 1

Новый растр создается по случайно сгенерированному массиву NumPy.

import arcpy
import numpy

# Create a simple array from scratch using random values
myArray = numpy.random.random_integers(0,100,2500)
myArray.shape = (50,50)

# Convert array to a geodatabase raster
myRaster = arcpy.NumPyArrayToRaster(myArray,x_cell_size=1)
myRaster.save("C:/output/fgdb.gdb/myRandomRaster")
NumPyArrayToRaster пример 2

Поблочная обработка входного многоканального растра и расчет статистики для ячеек по каналам. Этот скрипт преобразует многоканальный растр в трехмерный массив NumPy и обрабатывает массив, разделяя его на блоки данных. Затем он вычисляет среднее значений по строкам блока, преобразует разбитый на блоки массив NumPy в растр и объединяет каналы посредством мозаики. Создан новый многоканальный растр.

# Note that, if the input raster is multiband, the data blocks will also be
# multiband, having dimensions (bands, rows, columns).  Otherwise, they will
# have dimensions (rows, columns).

import arcpy
import numpy
import os

# Input raster
filein = os.path.join(os.getcwd(),r"input\input.tif")

# Output raster (after processing)
fileout = os.path.join(os.getcwd(),r"output\blockprocessingrdb22.tif")

# Size of processing data block
# where memorysize = datatypeinbytes*nobands*blocksize^2
blocksize = 512

# ----------------------------------------------------------------------------
# Create raster object from file
myRaster = arcpy.Raster(filein)

# Set environmental variables for output
arcpy.env.overwriteOutput = True
arcpy.env.outputCoordinateSystem = filein
arcpy.env.cellSize = filein

# Loop over data blocks
filelist = []
blockno = 0
for x in range(0, myRaster.width, blocksize):
    for y in range(0, myRaster.height, blocksize):

        # Lower left coordinate of block (in map units)
        mx = myRaster.extent.XMin + x * myRaster.meanCellWidth
        my = myRaster.extent.YMin + y * myRaster.meanCellHeight
        # Upper right coordinate of block (in cells)
        lx = min([x + blocksize, myRaster.width])
        ly = min([y + blocksize, myRaster.height])
        #   noting that (x, y) is the lower left coordinate (in cells)

        # Extract data block
        myData = arcpy.RasterToNumPyArray(myRaster, arcpy.Point(mx, my),
                                          lx-x, ly-y)

        # PROCESS DATA BLOCK -----------------------------
        # e.g. Calculate mean of each cell of all bands.
        myData -= numpy.mean(myData, axis=0, keepdims=True)
        # ------------------------------------------------

        # Convert data block back to raster
        myRasterBlock = arcpy.NumPyArrayToRaster(myData, arcpy.Point(mx, my),
                                                 myRaster.meanCellWidth,
                                                 myRaster.meanCellHeight)

        # Save on disk temporarily as 'filename_#.ext'
        filetemp = ('_%i.' % blockno).join(fileout.rsplit('.',1))
        myRasterBlock.save(filetemp)

        # Maintain a list of saved temporary files
        filelist.append(filetemp)
        blockno += 1

# Mosaic temporary files
arcpy.management.Mosaic(';'.join(filelist[1:]), filelist[0])
if arcpy.Exists(fileout):
    arcpy.management.Delete(fileout)
arcpy.management.Rename(filelist[0], fileout)

# Remove temporary files
for fileitem in filelist:
    if arcpy.Exists(fileitem):
        arcpy.management.Delete(fileitem)

# Release raster objects from memory
del myRasterBlock
del myRaster
# ----------------------------------------------------------------------------
NumPyArrayToRaster пример 3

Конвертирует NumPyArray в многомерный растр.

import arcpy
import numpy

# Create multidimensional raster object from the NetCDF file
in_raster = Raster("myData.nc", True)
lowerLeft = arcpy.Point(in_raster.extent.XMin, in_raster.extent.YMin)
blockSize = 256

# Convert Raster to Array 
myRasterBlock = arcpy.NumPyArrayToRaster(in_raster, lowerLeft, blockSize, blockSize)

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