Manipulating raster data using ArcPy

Dr. Huidae Cho
Institute for Environmental and Spatial Analysis...University of North Georgia

1   NumPy

“The fundamental package for scientific computing with Python”

It comes with the default ArcGIS Pro installation.

import numpy as np

2   Making NoData cells

ras = arcpy.Raster('YOUR_RASTER_LAYER_NAME')

# convert raster to numpy array (numpy.ndarray class) since arcpy.Raster doesn't expose cell values directly
ras_a = arcpy.RasterToNumPyArray(ras)

ras2_a = ras_a.copy()
ras2_a[100:200,100:200] = 999
ras2 = arcpy.NumPyArrayToRaster(ras2_a, ras.extent.lowerLeft, ras.meanCellWidth, ras.meanCellHeight, 999)
arcpy.CopyRaster_management(ras2, 'P:\YOUR_PATH\ras2.tif')

3   Array coordinates ↔ Map coordinates

We need the Extent, meanCellWidth, and meanCellHeight attributes to map between ndarray and map coordinates.

# dimension of ras_a
# number of rows
# number of columns

4   get_array_indices

def get_array_indices(xy, ext, res):
  Get array indices using x, y, extent, and resolution
  xy:  (x, y) indices
  ext: raster extent
  res: (width, height) raster resolution
  x = xy[0]
  y = xy[1]
  w = res[0]
  h = res[1]
  row = int((ext.YMax-y)/h)
  col = int((x-ext.XMin)/w)
  return row, col

5   Homework: Coordinate conversion

Complete this function.

def get_raster_coordinates(rc, ext, res):
  Get raster coordinates using row, column, extent, and resolution
  rc:  (row, column) indices
  ext: raster extent
  res: (width, height) raster resolution
  row = rc[0]
  col = rc[1]
  w = res[0]
  h = res[1]
  return x, y