Mapová algebra

r.mapcalc

  • K jednoduchým, ale i komplikovaným výpočtům mapové algebry slouží modul 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"
../_images/mapcalc1.png

Operace s okolím (maticové operace) na příkladu lowpass filter

Zobrazte si mapu 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 spot_lowpass je potřeba nastavit barvy, aby odpovídaly mapě spot.image

GRASS> r.colors map=spot_lowpass rast=spot.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())"
../_images/horsky_les.png

Funkce sin() a col(), row() a 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
../_images/mapcalc02.png

Nevýhody r.mapcalc

  • r.mapcalc projde všechny buňky v rastrové mapě a provede s nimi požadovanou operaci

  • 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 r.mapcalc. Lze s ním pracovat jen omezeně

../_images/r_mapcalculator.png

r.patch

  • Několik rastrových map lze spojit modulem 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 r.patch:

    GRASS> r.patch in=roads,railroads out=bariery_odtoku
../_images/roads_rails.png