153ZODH / 4. cvičení
< Stránky předmětu • Předchozí cvičení • Další cvičení
Osnova
Rastrová algebra
Rastrová (mapová) algebra (Map algebra) je poměrně komplexní téma. Rastrovou algebru má v GRASSu ve své moci téměř všemocný modul r.mapcalc (viz manuálová stránka modulu). K tématu rastrové algebry je dostupný i speciální tutoriál. Rastrové algebře je věnována kapitola 6.16 v GRASS příručce a kapitola 15 v GIS GRASS 6.0 - Praktická rukověť začínajících uživatelů.
Modul {{GrassPrikaz|r.mapcalc} lze ho ovládat vedvou různým módech - tzv. interaktivním, kdy spustíte modul bez parametrů a zadáváte jednotlivé výrazy, pro ukončení slouží klíčové slovo "end".
# interaktivní mód modulu r.mapcalc # r.mapcalc Enter expressions, "end" when done. mapcalc> p12 = tm1 / tm2 mapcalc> p23 = tm2 / tm3 mapcalc> end
Výhodnější je však předat dané výrazy modulu jako parametr (uzavřít do uvozovek!), nebo je uložit do textového souboru (například při opětovném použití) a přesměrovat do modulu přes standardní vstup.
# zadání výrazu jako parametr # r.mapcalc 'p12 = tm1 / tm2' r.mapcalc 'p23 = tm2 / tm3' # # výrazy uložené v textovém souboru # r.mapcalc < podily.txt
Poznámka: Modul r.mapcalc provádí výpočet podobně jako ostatní moduly pro zpracování rastrových dat v aktuální výpočetním regionu!
Obecná forma výrazu:
nova_mapa = vyraz (mapa1, mapa2, ...)
kde vyraz může zahrnovat názvy rastrových mapových vrstev, celočíselné či reálné konstanty a podporované funkce.
operátor | popis | typ | priorita |
---|---|---|---|
^ | exponent | aritmetický | 5 |
% | modulo (zbytek po celočíselném dělení) | aritmetický | 4 |
/ | dělení | aritmetický | 4 |
* | násobení | aritmetický | 4 |
+ | sčítání | aritmetický | 3 |
- | odečítání | aritmetický | 3 |
== | rovnost | logický | 2 |
!= | nerovnost | logický | 2 |
> | větší než | logický | 2 |
< | menší než | logický | 2 |
>= | větší rovno než | logický | 2 |
<= | menší rovno než | logický | 2 |
&& | AND (a) | logický | 1 |
|| | OR (nebo) | logický | 1 |
# | rozděluje tabulku barev | aritmetický | - |
funkce | význam | mat. zápis | typ |
---|---|---|---|
abs(x) | absolutní hodnota z x | |x| | |
atan(x) | arkustangens z x (výsledek ve stupních) | arctan(x) | F |
atan(x,y) | arkustangens z x/y (výsledek ve stupních) | arctan(x/y) | F |
cos(x) | kosinus z x (x ve stupních) | cos(x) | F |
double(x) | převede x na číslo s plovoucí desetinnou čárkou (výstupní mapa DCELL) | F | |
eval([x,y,...,]z) | vyhodnotí výrazy x a y a výsledek uloží do z | ||
exp(x) | exponenciální funkce z x | ex | F |
exp(x,y) | mocnina y z x | xy | F |
float(x) | převede x na číslo s plovoucí desetinnou čárkou (výstupní mapa FCELL) | F | |
if | podmíněný příkaz | ||
if(x) | 1, když x není 0, jinak 0 | ||
if(x,a) | a, když x není 0, jinak 0 | ||
if(x,a,b) | a, když x není 0, jinak b | ||
if(x,a,b,c) | a, když x > 0, b když x rovno 0, c když x < 0 | ||
int(x) | převede x na celé číslo, zbytek odřízne | ||
isnull() | 1, když x rovno NULL (no data) | F | |
log(x) | přirozený logaritmus z x | ln(x) | F |
log(x,b) | logaritmus z x při základu b | logb(x) | F |
max(x,y [,z...]) | vrátí největší ze zadaných hodnot | * | |
median(x,y[,z...]) | vrátí prostřední hodnotu (medián) ze zadaných hodnot | * | |
min(x,y[,z...]) | vrátí nejmenší ze zadaných hodnot | * | |
mode(x,y[,z...]) | vrátí nejčetnější hodnotu (modus) ze zadaných hodnot | * | |
not(x) | 1 pokud x je nula, jinak 0 | ||
rand(low,high) | vrátí náhodnou číselnou hodnotu z intervalu [low; high] | ||
round(x) | zaokrouhlí x na nejbližší celočíselnou hodnotu | I | |
sin(x) | sinus z x (x ve stupních) | sin(x) | F |
sqrt(x) | odmocnina z x | sqrt(x) | F |
tan(x) | tangens z x (x ve stupních) | tan(x) | F |
Vysvětlivky:
* | ... | Vrací reálné číslo, pokud je x reálné číslo. |
F | ... | Výsledek je vždy reálné číslo. |
I | ... | Výsledek je celé číslo. |
proměnná | význam |
---|---|
x() | proměnná pro aktuální souřadnici x |
y() | proměnná pro aktuální souřadnici y |
col() | proměnná pro aktuální číslo sloupce |
row() | proměnná pro aktuální číslo řádku |
nsres() | proměnná pro aktuální rozlišení sever-jih |
ewres() | proměnná pro aktuální rozlišení východ-západ |
V následující části se zaměříme na lokalní operace, kdy hodnota výsledné buňky vzniká na základě hodnot korespondujících hodnot vstupní vrstvy/vrstev). V dalších cvičeních se budeme používat operace fokální, které se provádí v rámci množiny rastrových buněk pokryté tzv. moving window -- plovoucím oknem.
Několik drobných poznámek:
- Datový typ buněk výsledné vrstvy (celočíselná; hodnoty s plovoucí desetinnou čárkou) se odvozuje z datového typu buněk vstupních vrstev a datovém typu konstant uvedených ve výrazu. Výsledkem dělení dvou celočíselných rastrových vrstev je tedy opět vrstva s celočíselnými hodnotami buněk!
- Vstupují-li do výpočtu rastrové buňky s hodnotou NULL ("žádná data") je výsledkem opět hodnota NULL.