Převod rastru do objektu numpy array

10. 8. 2018
  • Další
  • ArcGIS 10.0
  • ArcGIS 10.1
  • ArcGIS 10.2
  • ArcGIS 10.3
  • ArcGIS 10.4
  • ArcGIS 10.5
  • ArcGIS 10.6
  • ArcGIS Pro 1.0
  • ArcGIS Pro 1.1
  • ArcGIS Pro 1.2
  • ArcGIS Pro 1.3
  • ArcGIS Pro 1.4
  • ArcGIS Pro 2.0
  • ArcGIS Pro 2.1
  • ArcGIS Pro 2.2

Při práci v Pythonu může být vhodné převést rastrová data do objektu numpy array, například při zpracování funkcemi, které nepatří do knihoven ArcGIS. V tomto n-dimensionálním objektu pak lze data dále zpracovávat nejen funkcemi knihovny numpy, ale i pomocí dalších knihoven, jako je například SciPy. Knihovna arcpy obsahuje funkci arcpy.RasterToNumPyArray, která tento převod zajistí.

Tato funkce má pět vstupních parametrů:

  • vstupní rastr (logicky poviný parametr),
  • bod značící levý dolní roh rastru v mapových souřadnicích (případně levý dolní roh samotného rastru),
  • počet sloupců matice (výchozí hodnota odpovídá vstupnímu rastru),
  • počet řádek matice (výchozí hodnota odpovídá vstupnímu rastru),
  • hodnota, která se přiřadí buňkám rastru bez zadané hodnoty.

Pokud například máme data digitálního modelu terénu a chceme spočítat a zobrazit grafy průměrné výšky ve sloupcích a řádcích rastru, knihovny numpy a matplotlib nám tuto úlohu velmi zjednoduší. Prvním krokem tedy bude převod dat:

import arcpy
import numpy

p_inputRS = r"d:\\UKOLY\\S_12907\\FGDB.gdb\\dmt"
numpyArray = arcpy.RasterToNumPyArray(p_inputRS,'#','#','#',numpy.NaN)

(v potaz se bere celý vstupní rastr a pixelům bez hodnoty se přiřazuje speciální hodnota numpy.NaN)

S objektem numpy array už následně můžeme pomocí knihovny numpy jednoduše spočítat např. celkovou průměrnou hodnotu:

celkovy_prumer = numpy.nanmean(numpyArray)

nebo námi požadované průměrné hodnoty podle obou os matice (s použitím parametru Axis s hodnotami 0 a 1):

prumer_sloupce = numpy.nanmean(numpyArray,0)
prumer_radky = numpy.nanmean(numpyArray,1)

Knihovnou matplotlib pak můžeme jednoduše třemi příkazy získat graf vypočtených průmerů podle os:

import matplotlib.pyplot as plt
plt.plot(prumer_sloupce)
plt.show()

Autor: Martin Král