Rastrová analýza nákladů

Nejprve si v aktuálním mapsetu vytvoříme kopii vektorové mapy silnice.

Poznámka

Tento krok je potřeba, jelikož budeme modifikovat atributovou tabulku vektorové mapy. A jak již bylo uvedeno v kapitole Struktura dat - koncept lokací a mapsetů systém GRASS umožňuje editovat pouze datové elementy z aktuálního mapsetu.

Přidáme nový atribut rychlost, do něhož uložíme průměrnou rychlost dle následující tabulky:

Silnice Typ Rychlost (km/h)
Dálnice 1 130
Rychlostní silnice 2 110
Silnice 1.třídy 3 90
Silnice 2.třídy 4 70
Silnice 3.třídy 5 60

Editaci hodnot atributů umožňuje Field Calculator.

../_images/field-calculator-speed.png

Obrázek 1: Příklad určení atributu rychlosti pro dálnice (typ = 1).

Poznámka pro pokročilé

Nastavení atributu rychlosti z příkazové řádky

v.db.addcolumn map=silnice column="rychlost integer"
v.db.update map=silnice column=rychlost value=130 where="typ=1"
v.db.update map=silnice column=rychlost value=110 where="typ=2"
v.db.update map=silnice column=rychlost value=90  where="typ=3"
v.db.update map=silnice column=rychlost value=70  where="typ=4"
v.db.update map=silnice column=rychlost value=60  where="typ=5"

Dále převedeme modulem v.to.rast (File ‣ Map type conversions ‣ Vector to raster) vektorovou mapu silnice do rastrové reprezentace. Před konverzí je nutné nastavit výpočetní region, např. interaktivně z mapového okna nebo z příkazové řádky:

g.region align=dmt n=-974156 s=-994356 w=-766980 e=-736680
v.to.rast input=silnice output=silnice_rast use=attr attribute_column=rychlost type=line

Dále použijeme vrstvy vodni_toky a vodni_nadrze jako přirozené bariéry pro pohyb mimo silnice. Provedeme rasterizaci, rastrové vrstvy složíme pomocí modulu r.patch.

v.to.rast input=vodni_toky output=vodni_toky_rast use=val type=line
v.to.rast input=vodni_nadrze output=vodni_nadrze_rast use=val type=area
r.patch input=vodni_toky_rast,vodni_nadrze_rast output=bariery

V místech mimo silnice (hodnota 0) přiřadíme pomocí nástroje r.mapcalc (viz kapitola Rastrová algebra) rychlost pohybu '5'. Vzniklé rastrové mapě přiřadíme tabulku barev 'sepia', viz kapitola Tabulka barev.

r.mapcalc expression='rychlost = if(isnull(silnice_rast), if(isnull(bariery), 5, null()), silnice_rast)'
r.colors -n map=rychlost color=sepia
../_images/grass-streets-speed.png

Obrázek 2: Rasterizovaná síť silnic s atributem průměrné rychlosti a bariérami.

Modulem v.in.ascii vytvoříme vektorovou mapu s ohniskem požáru. Souřadnice bodu (-754235,-980474) zadáme v notaci X|Y|cat, kategorii zvolíme libovolně, např. 1. Ve výsledku bude tedy zápis bodu vypadat následovně: -754235|-980474|1.

../_images/wxgui-v-in-ascii.png

Obrázek 3: Vytvoření mapy s ohniskem požáru - definujeme souřadnice ohniska požáru a název výsledné vektorové mapy.

Rastrovou mapu časové náročnosti vytvoříme pomocí modulu r.mapcalc, viz kapitola Rastrová algebra. Uvažujeme prostorové rozlišení 25m a výpočet časové náročnosti pro překonání buňky v minutách.

r.mapcalc expression="rychlost_cas = 25.0 / ((1000 * rychlost) / 60.0)"

Varování

Pozor na dělení celých čísel, výsledkem je v mapové algebře systému GRASS vždy celé číslo. Proto je v čitateli použito číslo s plovoucí desetinnou čárkou (25.0).

Pomocí modulu r.cost (Raster ‣ Terrain analysis ‣ Cost surface) vypočteme rastrovou mapu nákladů pohybu, tzv. frikční povrch.

r.cost -k input=rychlost_cas output=cas_naklady start_points=pozar
../_images/grass-streets-cost.png

Obrázek 4: Analýza nákladů pohybu v terénu, ohnisko požáru a požární stanice (tabulka barev "oranges").

Dojezdovost pro jednotlivé požární stanice k ohnisku požáru vypočteme z rastru nákladu pomocí modulu v.what.rast (Vector ‣ Update attributes ‣ Sample raster maps at point locations). Nejprve si v aktuálním mapsetu vytvoříme kopii vektorové mapy pozarni_stanice. Přidáme nový atribut dojezdovost, do něhož uložíme hodnotu dojezdovosti pro danou požární stanici.

Poznámka pro pokročilé

Přidání atributu dojezdovosti z příkazové řádky

g.copy vector=pozarni_stanice@osm,pozarni_stanice
v.db.addcolumn map=pozarni_stanice column="dojezdovost double precision"
v.what.rast map=pozarni_stanice raster=cas_naklady column=dojezdovost
../_images/grass-streets-nearest.png

Obrázek 5: Nalezení požární stanice s nejmenší hodnotou dojezdovosti.

Souřadnice požární stanice s kategorií '89' poskytne modul v.out.ascii (File ‣ Export vector map ‣ ASCII points or GRASS ASCII vector export).

v.out.ascii input=pozarni_stanice cats=89
-750649.82535985|-992867.12907965|89

Nejkratší (spádovou) cestu vypočteme modulem r.drain (Raster ‣ Terrain analysis ‣ Least cost route or flow).

r.drain -n input=cas_naklady output=cesta_rast start_coordinates=-750649,-992867
../_images/grass-streets-path.png

Obrázek 6: Výsledek, nejkratší cesta k požáru.

../_images/grass-streets-path-3d.png

Obrázek 7: Vizualizace rastrové mapy nákladů včetně nejkratší spádové cesty ve 3D.

Tip

Optimální cestu lze převést do vektorové reprezentace pomocí modulu r.to.rast:

r.to.vect input=cesta_rast output=cesta type=line