Rastrová data v ArcPy

Programování v GIS 3

Jan Caha

2024-10-21

Objekty

  • arcpy.Raster - třída pro práci s rastrovými daty
  • arcpy.RasterInfo - třída vlastností rastru (např. rozměry, souřadnicový systém, atd.)
  • arcpy.RasterCellIterator - třída pro iteraci přes buňky rastru

Raster

  • základní třída pro rastrová data
  • může být multidimenzionální (více pásem)
  • lze načíst i pouze vybraná pásma (cesta_k_souboru/Band_1)
  • atributy třídy - informace o rastru, ale i formátu uložení
  • funkce pro práci s rastrem
  • funkce read() a write() pro čtení a zápis hodnot ve formátu NumPy pole

RasterInfo

  • “otisk” či definice rastru
  • lze jednak získat z objektu Raster funkcí getRasterInfo(), pak má hodnoty z daného rastru
  • nebo vytvořit jako prázdný objekt a pak je nutné nastavit potřebné atributy
  • na základě objektu RasterInfo lze vytvořit nový rastr (Raster(RasterInfo())), ale bez dat

RasterCellIterator

  • objekt pro iteraci přes buňky rastru
  • v nejjednodušší podobě jako
import arcpy

raster = arcpy.Raster("path/to/raster.tif")
raster.readOnly = False

for i, j in raster:
  print(f"{i,j} - {raster[i,j]}")
  if raster[i,j] <  0:
    raster[i,j] = 0  

RasterCellIterator - indexy

  • jednopásmové rastry - i, j v pořadí řádek, sloupec
  • číslování začíná v levém horním rohu (buňka 0,0) a pokračuje dolů a doprava
  • vícepásmové rastry
    • buď k, i, j v pořadí pásmo, řádek, sloupec a vrací jednu hodnotu
    • nebo i, j - řádek, sloupec a vrací tuple hodnot pro pásma

RasterCellIterator - vícero rastrů

  • pozor na inicializaci - jedná se o python dictionary s klíči - zde rasters (ale jsou další)
with RasterCellIterator({'rasters':[myRas1, myRas2, outRas1, outRas2]}) as rci:
    for i,j in rci:
      pass
  • první rastr určuje nastavení enviromentu - souřadnicový sytém, velikost buňky a extent
  • díky tomu lze iterovat přes vícero rastrů současně
  • raster lze předefinovat na dané nastavení pomocí
r_1_env = arcpy.sa.ApplyEnvironment(r_1)

RasterCellIterator - doplnění

  • python hodnota math.nan se implicitně konvertuje na NoData
  • při tvorbě RasterCellIterator lze uvést v dictionary tyto klíče
    • 'padding': 2 - vhodné pro jádrové funkce (např. průměry okolí), přednačte iterátor s okolím buňky o velikosti (vlastně matice 5x5) pro rychlejší výpočty
    • 'skipNoData':[r_1, r_2] - budou se řešit pouze buňky, které u uvedených rastrů nemají hodnotu NoData, jinak se přeskočí (může to výrazně zrychlit výpočty)

Numerické operace s rastry

  • mapová algebra
  • lze provádět na úrovni celého rastru
import arcpy

r_1 = arcpy.Raster("path/to/raster.tif")

r_2 = r_1 + 10
r_3 = r_1 * r_2

r_3.save("path/to/output.tif")

Funkce pro rastry

  • funkce aplikované na zdrojové rastry
  • arcpy.sa - modul pro prostorovou analýzu

Dotazy?