Show the code
library(tidyverse)
library(tmap)
library(sf)
library(igraph)
::tmap_mode("plot") tmap
Marc Bosch
February 8, 2023
Fa no massa vaig veure un mapa d’Europa amb totes les seves conques fluvials. Avui intentarem fer el mateix amb R utilitzant dades d’OpenStreetMap. Primer, llegim les dades de rius, rieres i torrents.
name | waterway | ogr_geometry |
---|---|---|
Riu Besòs | river | LINESTRING (2.251363 41.546… |
Riu de Comallempla | stream | LINESTRING (1.444706 42.569… |
Riu de Setúria | river | LINESTRING (1.440852 42.545… |
Riera dels Canyars | stream | LINESTRING (1.971461 41.297… |
NA | stream | LINESTRING (2.01132 41.2843… |
NA | stream | LINESTRING (2.007163 41.280… |
Per a crear un mapa de conques hidrogràfiques, cal que ajuntem tots els rius que es toquen entre sí. Tocarà jugar una mica amb xarxes. També ho haurem de filtrar per tenir només les que fan més de 100 km de llargada, perquè el mapa sigui llegible.
my_idx_touches <- st_touches(rius) # determinar quins segments es toquen entre sí
xarxa_rius <- graph_from_adj_list(my_idx_touches) # crear una xarxa
ids <- components(xarxa_rius)$membership # crear un vector amb el grup al qual pertany cada segment de riu
rius_agrupat <- rius |>
group_by(conca = as.character({{ids}})) |>
summarise()
rius_filtrat <- rius_agrupat |>
filter(as.numeric(st_length(`_ogr_geometry_`)) >= 100000) # filtrar per conques de menys de 100 km