Vizualizace výškopisu, neboli terénního reliéfu, je jedním z častých případů využití erkové package {RCzechia}
. Zejména v přírodních vědách se ukazuje potřeba od sebe odlišit horské a nížinné oblasti (zatímco administrativní jednotky, coby lidský konstrukt, jsou spíše méně relevantní).
{RCzechia}
podporuje dvě formy výškopisu:
- stínovanou - rastr ilustrující členitost terénu; typicky se zobrazuje v odstínech šedé
- skutečnou - rastr, jehož hodnoty ukazují skutečnou nadmořskou výšku; typicky se zobrazuje v konvenci hypsometrických barev (nížiny zeleně, vrchoviny hnědě, a velehory bíle)
-
ostře oříznutý na hranice Česka
- neoříznutý, se zachovaným výškopisem sousedů; zasahuje 25 kilometrů navíc od nejzazších bodů Česka. Rozsah je přibližně od pramenů Ohře k Malé Fatře.
Základní formou vizualizace je base plot. Nedává úplně publikační kvalitu, ale je super pro rychlý náhled. Sestavit ho zabere pár řádků kódu. Zde stínovaný výškopis v neoříznuté formě.
library(RCzechia)
library(terra)
# stínovaný výškopis jako lokální objekt
stiny <- RCzechia::vyskopis(format = "rayshaded", cropped = FALSE)
# plot výškopisu
plot(stiny,
col = gray.colors(15), # 50 odstínů šedi...
legend = FALSE) # vysvětlení intenzity šedé nepředstavuje přidanou hodnotu
# plot hranic
plot(RCzechia::republika("low"), # zjednodušený obrys republiky
border = "red", # hranice červeně
col = NA, # bez výplně
add = TRUE) # vykreslit přes přeschozí plot / prostý výškopis
Pro sofistikovanější použití se hodí vybrat z výškopisu Česka pouze relevantní část. Pro přesné vymezení oblasti zájmu doporučuji praktický nástroj bboxfinder. Jako příklad oblasti zájmu jsem vybral pohoří Východní Sudety, ale jiná by posloužila stejně dobře.
Pouze – vzhledem k rozlišení podkladového rasteru, který má pro řízení objemu stahovaných dat pixely o velikosti přibližně 100×100 metrů – doporučím oblasti zájmu o velikosti desítek kilometrů a větší. Pro menší to bude technicky fungovat stejně, ale obrázek bude “zrnitý”.
Prvním krokem je náhled na oblast zájmu technikou leaflet.js / vypadá dobře…
library(dplyr)
library(RCzechia)
library(leaflet)
# definování oblasti zájmu jako sf geometrie
area_of_interest <- c(xmin = 16.590729, ymin = 49.900827,
xmax = 17.536926, ymax = 50.515173) %>%
st_bbox(crs = st_crs(4326)) %>%
st_as_sfc()
# vizuální kontrola
leaflet(data = area_of_interest) %>%
addProviderTiles("Stamen.Toner") %>%
addPolygons()
Druhým krokem je vlastní zakreslení výškopisu technikami {ggplot2}
, který (na rozdíl od base plotu) dovedu s čistým svědomím doporučit pro použití v publikacích.
Pro oživení mapy doplňuji tři barevné vrcholky; povšimněte si techniky setřídění faktoru podle nadmořské výšky. Ta rozhodne o pořadí vrcholků v legendě grafu (jinak by to bylo abecedně; a Keprník před Pradědem nechceme).
Protože základní verze ggplotu není velký kamarád s prostorovými rastery tak využívám k zobrazení tidyterra::geom_spatraster()
z balíčku {tidyterra}
. A dále postupuji standardními technikami ggplotu, jako jsou nastavení barev, legend, titulků a popisků grafu.
library(terra)
library(ggplot2)
library(tidyterra) # ggplot2 v základní verzi rastery moc nemusí, proto doplněk
library(sf)
# reliéf Česka včetně okolí...
relief <- RCzechia::vyskopis(format = "actual",
cropped = FALSE) %>%
# ... oříznutý na oblast zájmu
crop(area_of_interest, mask = TRUE)
# nělikol vrcholů pro oživení obrázku
vrcholy <- data.frame(lat = c(50.0830, 50.2075, 50.1709),
long = c(17.2309, 16.8476, 17.1164),
nazev = c("Praděd", "Sněžník", "Keprník"),
vyska = c(1491, 1424, 1423)) %>%
st_as_sf(coords = c("long", "lat"), crs = 4326) %>%
mutate(nazev = forcats::fct_reorder(nazev, vyska, .desc = TRUE))
# obrázek technikami ggplotu - barevná škála podle nadmořské výšky
ggplot() +
tidyterra::geom_spatraster(data = relief) +
geom_sf(data = vrcholy,
aes(color = nazev),
pch = 4,
stroke = 2,
alpha = 4/5) +
scale_color_manual(values = c("Praděd" = "firebrick4",
"Sněžník" = "navyblue",
"Keprník" = "dodgerblue3")) +
scale_fill_gradientn(colors = hypso.colors(10),
labels = scales::label_number(suffix = " m"),
limits = c(150, 1550),
na.value = NA) +
labs(title = "Východní Sudety - země neznámá...",
fill = "Nadmořská\nvýška",
color = "Významné\nvrcholy") +
theme_bw() +
theme(legend.text.align = 1,
legend.title.align = 0.5)
Věřím, že jsem na jednoduchém příkladě ukázal možnosti využití balíčku {RCzechia}
jako zdroje podkladových dat pro výškopis Česka, a dále pak modelové příklady využití stínovaných a skutečných hodnot.
A to jak technikami base plotu, tak balíčku {ggplot2}
coby nejpoužívanějšího “dospělého” grafického nástroje ve světě erka. QED.