NumPyArrayToRaster

摘要

将 NumPy 数组转换为栅格。

说明

所生成的栅格数据集的大小和数据类型取决于输入数组。

NumpyArrayToRaster 支持将 2D NumPy 数组直接转换为单波段栅格,或将 3D NumPy 数组直接转换为多波段栅格。

NumpyArrayToRaster 支持通过提供多维信息将 3D NumPy 数组直接转换为多维栅格数据集,或将 4D NumPy 数组直接转换为多维多波段栅格数据集。

  1. 如果输入数组具有两个维度,则其返回的单波段栅格的大小由这两个维度(行、列)定义。
  2. 如果输入数组具有三个维度,则在其返回的多波段栅格中,波段数等于第一维的长度,而且该栅格的大小由第二维和第三维(波段、行、列)定义。
    • 如果输入数组具有三个维度并且第一维的大小为 1,则会返回单波段栅格。

拥有 x_cell_sizey_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_sizey_cell_size 都未指定,则 x 和 y 像元大小的默认值均为 1.0。

(默认值为 1.0)

Double
y_cell_size

y 方向的像元大小用地图单位指定。输入可为指定的像元大小(类型:双精度)值或栅格。

指定数据集后,该数据集的 x 像元大小将用在输出栅格的 y 像元大小中。

如果只确定了 y_cell_size 而没有确定 x_cell_size,则将会产生具有指定大小的方形像元。

如果 x_cell_sizey_cell_size 都未指定,则 x 和 y 像元大小的默认值均为 1.0。

(默认值为 1.0)

Double
value_to_nodata

在输出栅格中分配到 NoData 的 NumPy 数组值。如果没有为 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.Mosaic_management(';'.join(filelist[1:]), filelist[0])
if arcpy.Exists(fileout):
    arcpy.Delete_management(fileout)
arcpy.Rename_management(filelist[0], fileout)

# Remove temporary files
for fileitem in filelist:
    if arcpy.Exists(fileitem):
        arcpy.Delete_management(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)

相关主题