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í).

Balíček {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)
Pro obě formy výškopisu má dva rastery:
  • 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("CartoDB.Positron") %>% 
  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.