Rastrová data v ArcPy

Programování v GIS 3

Jan Caha

2026-10-19

Objekty

  • arcpy.Raster - základní objekt pro práci s rastrovými daty
  • arcpy.RasterInfo - metadata rastru (rozměr, extent, velikost buňky, souřadnicový systém, typ pixelu, atd.)
  • arcpy.sa.RasterCellIterator - iterátor přes buňky rastru v arcpy.sa

Raster

  • základní třída pro rasterová data
  • může být jednopásmová i vícepásmová
  • lze načíst i pouze vybrané pásmo: raster = arcpy.Raster("path/to/raster.tif/Band_1")
  • obsahuje vlastnosti typu width, height, bandCount, pixelType, extent, spatialReference
  • read() a write() pracují s daty ve formátu NumPy
import arcpy

raster = arcpy.Raster("C:/data/dem.tif")
print(raster.width, raster.height)
print(raster.bandCount, raster.pixelType)
print(raster.extent)

data = raster.read(upper_left_corner=(500, 500), nrows=100, ncols=100)
print(type(data), data.shape)

Raster - úprava hodnot

  • pokud je raster otevřen pro čtení, je readOnly = True
  • pro úpravu buněk je nutné nastavit readOnly = False
  • po změnách je vhodné uložit výsledek pomocí save()
import arcpy

raster = arcpy.Raster("C:/data/input.tif")
raster.readOnly = False

for i, j in raster:
    if raster[i, j] < 0:
        raster[i, j] = 0

raster.save("C:/data/output.tif")

RasterInfo

  • RasterInfo je “šablona” nebo metadata rastru
  • získá se z existujícího rastru: raster.getRasterInfo()
  • funkce arcpy.Raster(raster_info) vytvoří nový raster se stejnými vlastnostmi
  • velmi užitečné pro vytvoření výstupu s identickým rozlišením, rozměry a souřadnicovým systémem
import arcpy

in_raster = arcpy.Raster("C:/data/dem.tif")
info = in_raster.getRasterInfo()

out_raster = arcpy.Raster(info)
out_raster.save("C:/data/output_dem.tif")

RasterCellIterator

  • iterátor pro přístup ke všem buňkám rastru
  • v ArcPy je v modulu arcpy.sa
  • pro více rastrů je důležité zadat vstupní seznam v klíči rasters
import arcpy

raster_1 = arcpy.Raster("C:/data/dem.tif")
raster_2 = arcpy.Raster("C:/data/vegetation.tif")

with arcpy.sa.RasterCellIterator({"rasters": [raster_1, raster_2]}) as rci:
    for i, j in rci:
        values = rci[i, j]
        print(values)

RasterCellIterator - indexy

  • jednopásmový raster: i, j = řádek, sloupec
  • číslování začíná v levém horním rohu (0,0) a pokračuje dolů a doprava
  • vícepásmový raster:
    • k, i, j = pásmo, řádek, sloupec, vrací jednu hodnotu
    • i, j = řádek, sloupec, vrací tuple pro jednotlivá pásma

RasterCellIterator - vícero rastrů

  • parametr rasters je Python list/dictionary
  • první raster určuje prostředí iterace: extent, velikost buňky a souřadnicový systém
  • to je důležité při porovnávání více rastrů, které musí mít kompatibilní geometrii
with arcpy.sa.RasterCellIterator(
    {
        "rasters": [raster_1, raster_2, out_raster],
        "padding": 1,
        "skipNoData": [raster_1, raster_2],
    }
) as rci:
    for i, j in rci:
        values = rci[i, j]
        pass

RasterCellIterator - doplnění

  • math.nan se automaticky převádí na NoData
  • klíče v konfiguračním slovníku:
    • 'padding': 2 - přednačtení okolí buňky pro lokální operace (např. okna / filtry)
    • 'skipNoData': [r_1, r_2] - přeskočí buňky s NoData ve zvolených rastru
  • tato konfigurace výrazně zlepšuje výkon při práci s okolím a lokálními operacemi

Numerické operace s rastry

  • mapová algebra funguje na úrovni celého rastru
  • výsledek je nový Raster objekt
import arcpy

r_1 = arcpy.Raster("C:/data/raster_1.tif")
r_2 = r_1 + 10
r_3 = r_1 * r_2

r_3.save("C:/data/output_raster.tif")

Funkce pro rastry

  • pro rastrovou analýzu se používá arcpy.sa
  • modul obsahuje funkce pro filtrování, výpočty, statistik, maskování a zonální analýzu
  • pro práci se vstupním rastrem je často vhodné použít arcpy.sa.ApplyEnvironment()
import arcpy

input_raster = arcpy.Raster("C:/data/dem.tif")
output_raster = arcpy.sa.ApplyEnvironment(input_raster)

Poznámka k API

  • RasterCellIterator je ve arcpy.sa, ne v kořenovém arcpy
  • pro více rastrů je nezbytné udržovat kompatibilní rozlišení a extent
  • pro úpravu existujícího rastru je nutné nastavit readOnly = False
  • pro vytvoření nového rastru se často používá arcpy.Raster(raster.getRasterInfo())

Dotazy?