07. Zpracování časoprostorových dat v GRASS GIS¶
GRASS GIS nabízí specializované nástroje pro zpracování časoprostorových dat, viz GRASS dokumentace.
GRASS zavádí tři datové typy, které jsou určeny pro zpracování časovéprostorové řady dat:
- časoprostorové rastrové datové sady (
strds
) - časoprostorové 3D rastrové datové sady (
str3ds
) - časoprostorové vektorové datové sady (
stvds
)
Úvod (simulace povodně)¶
V této části navážeme na simulaci v
povodně. Simulaci povodně tentokrát
provedeme ve více časových krocím pomocí nástroje r.lake.series
.
Note
Nástroj r.lake.series
není výchozí součástí instalace GRASS GIS, jde o rozšíření - tzv. GRASS Addons. Tato rozšíření lze snadno nainstalovat pomocí g.extension
nebo z
hlavní nabídky Settings > Addons extensions > Install extension from addons
.
Nástroj r.lake.series
vytváří pro každý časový okamžik rastrovou
vrstvu s výškou aktuální hladiny a tyto vrstvy přidá do výstupního
časoprostorového datasetu.
Před výpočtem vytvoříme nový mapset zaplava
a nastavíme výpočetní region:
Vytvořme časoprostorovou řadu s vodními hladinami mezi 180.5m a 185.5m s krokem 0,1m:
r.lake.series elevation=DTM out=zaplava start_water_level=180.5 end_water_level=185.5 \
water_level_step=0.1 coordinates=-741903.25,-1040411.12 \
time_step=10 nproc=3
Časový krok je 10 minut. Pro zvýšení rychlosti výpočtu použijme více
jader procesoru (nproc
). Výsledek je uložen v časoprostorové datové
sadě s názvem zaplava
.
Základní informace o časoprostorové datové sadě získáme pomocí nástroje t.info
:
...
+-------------------- Relative time -----------------------------------------+
| Start time:................. 1
| End time:................... 501
| Relative time unit:......... minutes
| Granularity:................ 10
| Temporal type of maps:...... point
...
Informace o časové topologii vypišme pomocí t.topology
:
...
+-------------------- Temporal topology -------------------------------------+
...
| Number of points: .......... 51
| Number of gaps: ............ 50
| Granularity: ............... 10
...
Dotazování¶
Pomocí t.rast.list
lze vypsat rastrové vrstvy splňující danou
podmínku. Vypišme rastrové vrstvy v rámci první hodiny simulované
povodně:
name|mapset|start_time|end_time
zaplava_180.5|zaplava|1|None
zaplava_180.6|zaplava|11|None
zaplava_180.7|zaplava|21|None
...
Statistiku pro jednotlivé rastrové vsrtvy lze vypsat pomocí nástroje
t.rast.univar
. Vypočítejme statistiku pouze pro první hodinu povodně:
id|semantic_label|start|end|mean|min|max|...
zaplava_180.5@zaplava||1|None|1.5259037543889|1.52587890625e-05|6.46075439453125|...
zaplava_180.6@zaplava||11|None|1.50206839513946|1.52587890625e-05|6.56076049804688|...
zaplava_180.7@zaplava||21|None|1.55157986180243|1.52587890625e-05|6.66075134277344|...
Agregace¶
Agregaci dat lze provést pomocí t.rast.aggregate
. Agregujme data
záplavy po jedné hodině:
Příkaz vygeneruje novou časoprostorovou datovou sadu, kterou lze použít pro následné analýzy, jako je například jednorozměrná statistika:
id|semantic_label|start|end|mean|min|max|...
ag_00001@zaplava|61|1|None|1.43664612331051|1.52587890625e-05|6.71075439453125|...
ag_00002@zaplava|121|61|None|1.71285097692945|1.52587890625e-05|7.31075541178385|...
ag_00003@zaplava|181|121|None|2.05479336695301|1.52587890625e-05|7.91075388590495|...
Agregaci časoprostorových dat do jedné rastrové vrstvy lze provést
pomocí t.rast.series
. Agregujme data v rámci první hodiny povodně s
cílem vypočítat maximální výšku hladiny:
Statistiku vypišme pomocí r.univar
:
Ukázka maximální výšky povodně za první hodinu (na pozadí ČÚZK WMS Ortofoto):
Vizualizace¶
Vizualizaci časoprostorových dat ve formě animace umožňuje nástroj
g.gui.timeline
(File -> Animation tool
). Vytvořme animaci na
základě časoprostorového datasetu:
Ukázka animace:
Tip
Podkladovou vrstvu ortofota lze z kontextového menu nad vrtsvu v záložce Layers
stáhnout (Save web service layer
) a poté použít v animačním nástroji jako běžnou rastrovou vrstvu.
Analýza teploty povrchu zemského povrchu¶
K výpočtu teploty povrchu zemského povrchu použijeme data MODIS (Moderate Resolution Imaging Spectroradiometer). MODIS je 36kanálový sensor se spekrálním rozsahem od viditelného po tepelně infračervené záření. Byl vypuštěn jako součást družice Terra v roce 1999 a dále družice Aqua v květnu 2002. Družice Terra (produkty MOD) prolétá dvakrát denně (v 10:30 a 22:30 místního času), družice Aqua (produkty MYD) prolétá také dvakrát denně (v 01:30 a 13:30 místního času). Zdroj: GRASS Wiki
Naše zájmová oblast (Česká republika) je pokryta čtyřmi dlaždicemi MODIS (viz. MODLAND grid):
- h18v03
- h18v04
- h19v03
- h19v04
Data MODIS jsou poskytována ve třech projekcích (sinusoidální, Lambertova azimutální Equal-Area a geografické). Pro naše účely data transformujeme do ETRS89 / LAEA Europe (EPSG 3035).
Vytvořme novou GRASS lokaci fgis-modis pomocí kódu EPSG (Select CRS from a list by EPSG or description).
Vstupme do nové lokace (mapset PERMANENT) a nainstalujme rozšíření
(AddOn) i.modis
pro stažení a import dat MODIS. Kromě tohoto
rozšíření je nutné také doinstalovat další závislosti jako je
např. knihovna pyMODIS. V záložce Console
spusťme následující příkazy:
Rozšíření pro MODIS se skládá ze dvou nástrojů:
i.modis.download
ai.modis.import
Stažení dat¶
Poznámka
Předstažená data najdete na GIS.labu v adresáři Repository/155FGIS/07
. Data překopírujte do domovského adresáře (nástroj i.modis.import
vyžaduje právo zápisu do adresáře se vstupními daty).
Stáhněme si požadované dlaždice pro rok 2023 pomocí příkazu
i.modis.download
. Dále zvolme produkt (teplota zemského povrchu
agregovaná po osmi dnech s rozlišením 1 km Terra/Aqua) :
i.modis.download settings=settings.txt folder=modis-2023 tiles=h18v03,h18v04,h19v03,h19v04 \
product=lst_aqua_eight_1000,lst_terra_eight_1000 \
startday=2023-01-01 endday=2023-12-31
Poznámka
Výstupní složka (modis-2023
v tomto případě) musí existovat, jinak nástroj selže.
Soubor settings.txt
obsahuje dva řádky: jméno uživatele a heslo
pro přístup ke službě stahování MODIS. Přečtěte si dokumentaci
pyModis jak se
zaregistrovat a nastavit svůj účet.
Import dat¶
Vstupní data MODIS lze importovat a transformovat do cílového
souřadnicového systému pomocí i.modis.import
. Naimportujme postupně
data z družice Terra a poté Aqua:
i.modis.import -mwq files=modis-2023/listfileMOD11A2.061.txt \
outfile=tlist-mod.txt
i.modis.import -mwq files=modis-2023/listfileMYD11A2.061.txt \
outfile=tlist-myd.txt
Přepínač -m
má za následek vytvoření mozaiky ze vstupních
dlaždic. Vynecháme také z důvodu rychlosti importu QA (Quality
Assestment) vrstvy (-q
). Poslední uvedný přepínač (-w
) má za
následek zápis souboru outfile
, který následně použijeme pro
registraci vrstev do časoprostorového datasetu.
Ukázka mozaiky vytvořené ze vstupních dlaždic:
Volba zájmového území¶
Tip
Pro stažení administrativní hranice ČR lze použít zásuvný modul QGIS RÚIAN s volbou "Výšší územně správní celky (VUSC)".
Vytvořený soubor ve formátu GPKG lze poté importovat do GRASS lokace.
Výpočet teploty povrchu země¶
Nejprve nastavme pomocí r.mask
masku pro výpočet. Nezapomeňme, že
před vytvořením masky musí být nastavena výpočetní oblast. Ta bude
definována vektorovou vrstvou státní hranice a zarovnána podle vstupní
MODIS vrstvy.
Zkontrolujeme hodnoty rozsahu importovaných dat MODIS pomocí nástroje
r.info
:
Aby bylo možné určit LST (Land Surface Temperature) ze vstupních dat, musíme převést digitální hodnoty (DN) na stupnici Celsia nebo Kelvina:
C = DN * 0,02 - 273,15
Převod do Celsiovy stupnice lze provést pomocí r.mapcalc
. Vhodné je
také nahradit nulové hodnoty pomocí hodnotou žádná data (v
terminologii GRASS hodnota NULL).
r.mapcalc expression="MOD11A2.A2023001_mosaic_LST_Day_1km_c = \
if(MOD11A2.A2023001_mosaic_LST_Day_1km != 0, \
MOD11A2.A2023001_mosaic_LST_Day_1km * 0.02 - 273.15, null())"
Zkontrolujme hodnoty rozsahu nové datové vrstvy LST.
Rekonstrukce LST ve stupnici Celsia (tabulka barev celsius
):
Vytvoření časoprostorového datasetu¶
Nový časoprostorový dataset lze vytvořit pomocí nástroje t.create
. Vytvořme dataset s názvem modis
:
V dalším kroku se importovaná data MODIS zaregistrují do
časoprostorového datasetu pomocí t.register
. Příkaz je třeba spustit
dvakrát, jednou pro data z družice Terra a podruhé pro družici Aqua:
Zkontrolujme základní metadata o vytvořené datové sadě pomocí t.info
:
...
| Start time:................. 2023-01-01 00:00:00
| End time:................... 2024-01-01 00:00:00
...
| Number of registered maps:.. 184
Úkol
Zkontrolujte granularitu. Produkt je agregován z hodnot v osmi denních intervalech.
Digitální hodnoty (DN) je třeba převést na stupnici Celsia. Výraz
mapové algebry lze na časoprostorovém datasetu aplikovat pomocí
nástroje t.rast.mapcalc
. Tento nástroj aplikuje výraz mapové algebry
na všechny rastrové vrstvy registrované ve vstupní časoprostorové
datové sadě.
Tip
Mnoho nástrojů pro zpracování časoprostorových dat (t.*
) podporuje
paralelizaci výpočtu (viz volba nproc
).
t.rast.mapcalc input=modis output=modis_c nproc=3 basename=c \
expression="if(modis != 0, modis * 0.02 - 273.15, null())"
Příkaz vytvoří novou časoprostorovou rastrovou datovou sadu a do ní
registruje vytvořené rastrové vrstvy s přepočítanými digitálními
hodnotami. Název nově vytvořených rastrových vrstev definuje parametr
basename
.
Poznámka
Všimněte si, že nové rastrové mapy budou vytvořeny v aktuální výpočetní oblasti a aplikovanou maskou.
Nástroj t.rast.colors
umožňuje nastavit tabulku barev pro všechny
rastrové vrstvy v časoprostorové datové sadě. Nástroj odpovídá
funkcionalitou r.colors
.
Úkol
Spočtěte statistiku pomocí nástroje pro vrstvy mezi 1.4.2023 a 30.4.2023:
id|semantic_label|start|end|mean|min|max|...
c_049@spectral||2023-04-07 00:00:00|2023-04-15 00:00:00|12.684121214772|-11.3099999999999|22.99|...
c_050@spectral||2023-04-07 00:00:00|2023-04-15 00:00:00|0.757510639154788|-17.63|8.21000000000004|...
c_051@spectral||2023-04-07 00:00:00|2023-04-15 00:00:00|13.698337137793|-16.3699999999999|23.77|...
Agregace po měsících¶
Agregaci dat na základě zadané granularity provádí nástroj
t.rast.aggregate
. Vytvořme novou časoprostorovou řadu s agregovanými
hodnotami LST po měsících:
Spočtěme statistiku pomocí nástroje t.rast.univar
:
id|semantic_label|start|end|mean|min|max|...
cm_2023_01@spectral||2023-01-01 00:00:00|2023-02-01 00:00:00|1.44984784545898|-7.7133333333333|6.75333333333337|...
cm_2023_02@spectral||2023-02-01 00:00:00|2023-03-01 00:00:00|-1.81418308716353|-10.1566666666666|2.8266666666667|...
cm_2023_03@spectral||2023-03-01 00:00:00|2023-04-01 00:00:00|2.47208359286264|-10.3966666666666|10.2736363636364|...
Úkol
Spočtěte statistiku pro měsíce červen a červenec.
Rozložení dat v časovém ose umožňuje vizualizovat nástroj g.gui.timeline
:
Úkol
Vytvořte animaci pomocí nástroje g.gui.animation
:
Rozsah tabulky barev nastavte pomocí volby range
. Minimální a maximální teplotu určíme pomocí t.info
.
Výpočet průměrné teploty pro roční období¶
Data z časoprostorového datasetu mohou být extrahována pomocí
t.rast.extract
. Vytvořme nový dataset pokrývající vybrané roční
období:
t.rast.extract input=modis_c where="start_time >= '2023-03-20' and start_time < '2023-06-20'" \
output=modis_c_spring
Nástroj t.rast.series
provádí agregregaci dat časoprostorového
datasetu do formy rastrové vrstvy. Vypočtěme průměrné teploty pro
vybrané roční období:
Tip
Nástroj t.rast.series
má parametr where
, který umožňuje aplikovat výběr bez nutnosti vytvářet nový dataset pomocí t.rast.extract
.
Průměrné teploty pro jaro 2023 vypočítejme pomocí r.univar
:
Extrakce denních a nočních teplot¶
Vytvořme dva nové časoprostorové datasety pro denní teploty a zvlášť
pro noční teploty, a to pomocí t.rast.extract
:
t.rast.extract input=modis where="name LIKE '%Day%'" output=modis_day
t.rast.extract input=modis where="name LIKE '%Night%'" output=modis_night
t.rast.mapcalc input=modis_day output=modis_c_day nproc=3 basename=c \
expression="if(modis_day != 0, modis_day * 0.02 - 273.15, null())"
t.rast.mapcalc input=modis_night output=modis_c_night nproc=3 basename=c \
expression="if(modis_night != 0, modis_night * 0.02 - 273.15, null())"
Porovnejme teploty pro dané období v noci a ve dne:
id|semantic_label|start|end|mean|min|max|...
c_25@spectral||2023-04-07 00:00:00|2023-04-15 00:00:00|12.684121214772|-11.3099999999999|22.99|...
c_26@spectral||2023-04-07 00:00:00|2023-04-15 00:00:00|13.698337137793|-16.3699999999999|23.77|...
id|semantic_label|start|end|mean|min|max|...
c_25@spectral||2023-04-07 00:00:00|2023-04-15 00:00:00|0.757510639154788|-17.63|8.21000000000004|...
c_26@spectral||2023-04-07 00:00:00|2023-04-15 00:00:00|-0.465633774755256|-14.79|6.95000000000005|...
Ukázka modelu¶
Následující model provede import MODIS dat a přepočet digitálních hodnot do stupňů Celsia:
Model ke stažení zde.
Další materiály¶
Automatizaci zpracování časoprostorových dat pomocí specializovaného Python API najdete v materiálech GRASS GIS Jena Workshop.