Conques hidrogràfiques de Catalunya

R
openstreetmap
tmap
Author

Marc Bosch

Published

February 8, 2023

Show the code
library(tidyverse)
library(tmap)
library(sf)
library(igraph)
tmap::tmap_mode("plot")

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.

Show the code
rius <- st_read("/home/marc/Documents/30dayMapChallenge/data/cataluna-latest.osm.pbf",
                query = "select * from lines where waterway in ('river','stream')")
bm <- tmaptools::read_osm(rius)
Show the code
tm_shape(bm) + 
  tm_rgb(alpha = 0.2) + 
  tm_shape(rius) + 
  tm_lines(col = "blue") + 
  tm_layout(frame = F)

Rius, rieres i rierols de Catalunya. Una mica caòtic, no?Col·laboradors d’OpenStreetMap

Show the code
knitr::kable(head(select(rius, name, waterway, `_ogr_geometry_`)), style = "pipe")
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.

Show the code
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
Show the code
map <- tm_shape(bm) + 
  tm_rgb(alpha = 0.2) + 
  tm_shape(rius_filtrat) + 
  tm_lines(col = "conca",
           palette = "viridis",
           legend.col.show = FALSE) + 
  tm_layout(frame = FALSE)
map

Les 14 principals conques hidrogràfiques de CatalunyaCol·laboradors d’OpenStreetMap