************** Mapová algebra ************** ================= :file:`r.mapcalc` ================= * K jednoduchým, ale i komplikovaným výpočtům mapové algebry slouží modul :command:`r.mapcalc` * Veškerá dokumentace k modulu je dostupná z manuálových stránek:: GRASS> g.manual r.mapcalc ------------------ Jednoduché operace ------------------ Součet dvou rastrových map:: GRASS> r.mapcalc "geology_soils=geology+soils" .. image:: ../../images/mapcalc1.png --------------------------------------------------------------- Operace s okolím (maticové operace) na příkladu lowpass filter --------------------------------------------------------------- Zobrazte si mapu :file:`spot.image` a vyhlaďte extrénmní hodnoty:: GRASS> r.mapcalc "spot_lowpass= (spot.image[-1,-1]+spot.image[-1,0]+spot.image[1,1]+ spot.image[0,-1] +spot.image[0,0] +spot.image[0,1]+ spot.image[1,-1] +spot.image[1,0] +spot.image[1,1] )/9" Před zobrazením mapy :file:`spot_lowpass` je potřeba nastavit barvy, aby odpovídaly mapě :file:`spot.image` :: GRASS> r.colors map=spot_lowpass rast=spot.image .. image:: ../../images/spot_lowpass.png ---------------------- Podmínka (horský les): ---------------------- Zobrazit lesy v nadm. výšce větší, než 1450 m:: GRASS> r.mapcalc "horsky_les=if( (elevation.dem>=1200 && elevation.dem<=1450) && (vegcover==3 || vegcover==4 || vegcover==5),1,null())" .. image:: ../../images/horsky_les.png -------------------------------------------------------------------- Funkce :func:`sin()` a :func:`col()`, :func:`row()` a :func:`null()` -------------------------------------------------------------------- :: GRASS> r.mapcalc "spot_sincos=if(sin(x()/10) + cos(y()/10) < 0, spot.image, null())" GRASS> d.rast -o spot_sincos Ještě správné nastavení barev a překreslení:: GRASS> r.colors map=spot_sincos rast=spot.image GRASS> d.redraw .. image:: ../../images/mapcalc02.png ----------------------------- Nevýhody :command:`r.mapcalc` ----------------------------- * :command:`r.mapcalc` projde všechny buňky v rastrové mapě a provede s nimi požadovanou operaci * :command:`r.mapcalc` neumí smyčky (např. ``for (i =-1, i<=1, i++){...``), ani postupně definované podmínky. Je potřeba používat podmínky vnořené:: if(map1 ==3, 1, if(map2 == 2, 2, if(map3 == 3, 1,null() ) ) )" * Citlivý na zlomy řádku, mezery, atd. * Od určitého bodu je výhodné implementovat danou operaci v jazyce C přímo jako samostaný modul. =============== r.mapcalculator =============== Grafické rozhraní k modulu :command:`r.mapcalc`. Lze s ním pracovat jen omezeně .. image:: ../../images/r_mapcalculator.png ======= r.patch ======= * Několik rastrových map lze spojit modulem :command:`r.mapcalc`, při definování mnoha různých podmínek * Potřebujeme-li však pouze spojit více rastrových map, použijeme raději :command:`r.patch`:: GRASS> r.patch in=roads,railroads out=bariery_odtoku .. image:: ../../images/roads_rails.png