153ZODH / 4. cvičení: Porovnání verzí
m sablona |
m r.mapcalc uvod |
||
Řádek 8: | Řádek 8: | ||
__TOC__ | __TOC__ | ||
== Osnova == | == Osnova == | ||
== Rastrová algebra == | |||
'''Rastrová (mapová) algebra''' ([http://en.wikipedia.org/wiki/Map_algebra Map algebra]) je poměrně komplexní téma. Rastrovou algebru má v GRASSu ve své moci téměř všemocný modul {{GrassPrikaz|r.mapcalc}} (viz manuálová stránka modulu). K tématu rastrové algebry je dostupný i speciální [http://grass.itc.it/gdp/raster/mapcalc-algebra.pdf tutoriál]. Rastrové algebře je věnována kapitola 6.16 v [http://grass.fsv.cvut.cz/wiki/index.php/GIS_GRASS_-_Praktick%C3%A1_rukov%C4%9B%C5%A5 GRASS příručce] a kapitola 15 v [http://grass.fsv.cvut.cz/wiki/index.php/GIS_GRASS_6.0_-_Praktick%C3%A1_rukov%C4%9B%C5%A5_za%C4%8D%C3%ADnaj%C3%ADc%C3%ADch_u%C5%BEivatel%C5%AF 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 <u>uvozovek</u>!), 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 {{GrassPrikaz|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 <tt>vyraz</tt> může zahrnovat názvy rastrových mapových vrstev, celočíselné či reálné konstanty a podporované funkce. | |||
<center> | |||
{|border="1px" cellpadding="3px" rules="all" | |||
|+Tab. č.1: Operátory | |||
|- | |||
!operátor !! popis !! typ !! priorita | |||
|- | |||
|<tt>^</tt> | |||
|exponent | |||
|aritmetický | |||
|align="right" | 5 | |||
|- | |||
|<tt>%</tt> | |||
|modulo (zbytek po celočíselném dělení) | |||
|aritmetický | |||
|align="right" | 4 | |||
|- | |||
|<tt>/</tt> | |||
|dělení | |||
|aritmetický | |||
|align="right" | 4 | |||
|- | |||
|<tt>*</tt> | |||
|násobení | |||
|aritmetický | |||
|align="right" | 4 | |||
|- | |||
|<tt>+</tt> | |||
|sčítání | |||
|aritmetický | |||
|align="right" | 3 | |||
|- | |||
|<tt>-</tt> | |||
|odečítání | |||
|aritmetický | |||
|align="right" | 3 | |||
|- | |||
|<tt>==</tt> | |||
|rovnost | |||
|logický | |||
|align="right" | 2 | |||
|- | |||
|<tt>!=</tt> | |||
|nerovnost | |||
|logický | |||
|align="right" | 2 | |||
|- | |||
|<tt>></tt> | |||
|větší než | |||
|logický | |||
|align="right" | 2 | |||
|- | |||
|<tt><</tt> | |||
|menší než | |||
|logický | |||
|align="right" | 2 | |||
|- | |||
|<tt>>=</tt> | |||
|větší rovno než | |||
|logický | |||
|align="right" | 2 | |||
|- | |||
|<tt><=</tt> | |||
|menší rovno než | |||
|logický | |||
|align="right" | 2 | |||
|- | |||
|<tt>&&</tt> | |||
|AND (a) | |||
|logický | |||
|align="right" | 1 | |||
|- | |||
|<tt><nowiki>||</nowiki></tt> | |||
|OR (nebo) | |||
|logický | |||
|align="right" | 1 | |||
|- | |||
|<tt>#</tt> | |||
|rozděluje tabulku barev | |||
|aritmetický | |||
|align="right" | - | |||
|- | |||
|} | |||
{|border="1px" cellpadding="3px" rules="all" | |||
|+Tab č.2: Funkce | |||
|- | |||
!funkce !! význam !! mat. zápis !! typ | |||
|- | |||
|<tt>abs(x)</tt> | |||
|absolutní hodnota z ''x'' | |||
|<tt><nowiki>|x|</nowiki></tt> | |||
| | |||
|- | |||
|<tt>atan(x)</tt> | |||
|arkustangens z ''x'' (výsledek ve stupních) | |||
|<tt>arctan(x)</tt> | |||
|F | |||
|- | |||
|<tt>atan(x,y)</tt> | |||
|arkustangens z ''x/y'' (výsledek ve stupních) | |||
|<tt>arctan(x/y)</tt> | |||
|F | |||
|- | |||
|<tt>cos(x)</tt> | |||
| kosinus z ''x'' (''x'' ve stupních) | |||
|<tt>cos(x)</tt> | |||
|F | |||
|- | |||
|<tt>double(x)</tt> | |||
|převede ''x'' na číslo s plovoucí desetinnou čárkou (výstupní mapa DCELL) | |||
| | |||
|F | |||
|- | |||
|<tt>eval([x,y,...,]z)</tt> | |||
|vyhodnotí výrazy ''x'' a ''y'' a výsledek uloží do ''z'' | |||
| | |||
| | |||
|- | |||
|<tt>exp(x)</tt> | |||
|exponenciální funkce z ''x'' | |||
|<tt>e<sup>x</sup></tt> | |||
|F | |||
|- | |||
|<tt>exp(x,y)</tt> | |||
| mocnina ''y'' z ''x'' | |||
|<tt>x<sup>y</sup></tt> | |||
|F | |||
|- | |||
|<tt>float(x)</tt> | |||
| převede ''x'' na číslo s plovoucí desetinnou čárkou (výstupní mapa FCELL) | |||
| | |||
|F | |||
|- | |||
|<tt>if</tt> | |||
|podmíněný příkaz | |||
| | |||
| | |||
|- | |||
|<tt>if(x)</tt> | |||
|''1'', když ''x'' není ''0'', jinak ''0'' | |||
| | |||
| | |||
|- | |||
|<tt>if(x,a)</tt> | |||
| ''a'', když ''x'' není ''0'', jinak ''0'' | |||
| | |||
| | |||
|- | |||
|<tt>if(x,a,b)</tt> | |||
|''a'', když ''x'' není ''0'', jinak ''b'' | |||
| | |||
| | |||
|- | |||
|<tt>if(x,a,b,c)</tt> | |||
|''a'', když ''x > 0'', ''b'' když ''x'' rovno ''0'', ''c'' když ''x < 0'' | |||
| | |||
| | |||
|- | |||
|<tt>int(x)</tt> | |||
|převede ''x'' na celé číslo, zbytek odřízne | |||
| | |||
| | |||
|- | |||
|<tt>isnull()</tt> | |||
|''1'', když ''x'' rovno ''NULL'' (no data) | |||
| | |||
|F | |||
|- | |||
|<tt>log(x)</tt> | |||
|přirozený logaritmus z ''x'' | |||
|<tt>ln(x)</tt> | |||
|F | |||
|- | |||
|<tt>log(x,b)</tt> | |||
|logaritmus z ''x'' při základu ''b'' | |||
|<tt>log<sub>b</sub>(x)</tt> | |||
|F | |||
|- | |||
|<tt>max(x,y [,z...])</tt> | |||
|vrátí největší ze zadaných hodnot | |||
| | |||
|* | |||
|- | |||
|<tt>median(x,y[,z...])</tt> | |||
|vrátí prostřední hodnotu (medián) ze zadaných hodnot | |||
| | |||
|* | |||
|- | |||
|<tt>min(x,y[,z...])</tt> | |||
|vrátí nejmenší ze zadaných hodnot | |||
| | |||
|* | |||
|- | |||
|<tt>mode(x,y[,z...])</tt> | |||
|vrátí nejčetnější hodnotu (modus) ze zadaných hodnot | |||
| | |||
|* | |||
|- | |||
|<tt>not(x)</tt> | |||
|1 pokud ''x'' je nula, jinak 0 | |||
| | |||
| | |||
|- | |||
|<tt>rand(low,high)</tt> | |||
|vrátí náhodnou číselnou hodnotu z intervalu [low; high] | |||
| | |||
| | |||
|- | |||
|<tt>round(x)</tt> | |||
|zaokrouhlí ''x'' na nejbližší celočíselnou hodnotu | |||
| | |||
|I | |||
|- | |||
|<tt>sin(x)</tt> | |||
|sinus z ''x'' (''x'' ve stupních) | |||
|<tt>sin(x)</tt> | |||
|F | |||
|- | |||
|<tt>sqrt(x)</tt> | |||
|odmocnina z ''x'' | |||
|<tt>sqrt(x)</tt> | |||
|F | |||
|- | |||
|<tt>tan(x)</tt> | |||
|tangens z ''x'' (''x'' ve stupních) | |||
|<tt>tan(x)</tt> | |||
|F | |||
|} | |||
</center> | |||
''Vysvětlivky:'' | |||
<div style="margin-left: 10px"> | |||
{| | |||
|- | |||
|* | |||
|... | |||
|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. | |||
|- | |||
|} | |||
</div> | |||
<center> | |||
{|border="1px" cellpadding="3px" rules="all" | |||
|+Tab č.3: Speciální proměnné | |||
|- | |||
! proměnná !! význam | |||
|- | |||
|<tt>x()</tt> | |||
|proměnná pro aktuální souřadnici ''x'' | |||
|- | |||
|<tt>y()</tt> | |||
|proměnná pro aktuální souřadnici ''y'' | |||
|- | |||
|<tt>col()</tt> | |||
|proměnná pro aktuální číslo sloupce | |||
|- | |||
|<tt>row()</tt> | |||
|proměnná pro aktuální číslo řádku | |||
|- | |||
|<tt>nsres()</tt> | |||
|proměnná pro aktuální rozlišení sever-jih | |||
|- | |||
|<tt>ewres()</tt> | |||
|proměnná pro aktuální rozlišení východ-západ | |||
|- | |||
|} | |||
</center> | |||
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. | |||
[[Soubor:ZOD-cv4-test-tm1_tm2.png|frame|center|Obr č.1 Vstupní kanály tm1 a tm2]] | |||
[[Soubor:ZOD-cv4-test-operace12.png|frame|center|Obr č.2: (a) tm1 + tm2; (b) tm1 - tm2; (c) tm1 * tm2; (d) tm1 / tm2; (e) 1.0 * tm1 / tm2]] | |||
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. | |||
Verze z 21. 10. 2008, 10:03
< 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.