Mapas geoespaciales con sf

Creación de paneles con shinydashboard

Png Kee Seng

Researcher

Introducción a sf

  • Usa sf para crear mapas geoespaciales
    • Abreviatura de "simple features"
  • Una visualización geoespacial con sf siempre se crea por capas
    • Como capas de pinceladas sobre un lienzo en blanco
    • No profundizaremos en visualizaciones geoespaciales

Pinceladas sobre un lienzo en blanco.

1 Imagen de rawpixel.com en Freepik
Creación de paneles con shinydashboard

Importar librerías y datos geoespaciales

  • Importa sf y tidyverse
  • Usa st_read() y st_as_sf() para leer archivos KML (Keyhole Markup Language)
    • london_poly: límites geoespaciales de Londres
    • london_loop: (casi) camino circular alrededor de Londres
    • london_capital: camino circular que une zonas del centro de Londres
    • listings_geo: coordenadas de alojamientos de Airbnb
library(sf)
library(tidyverse)
london_poly <- st_read("../data/london_boroughs_boroughs_kml.kml",
                            drivers = "KML", quiet=TRUE)
london_loop <- st_read("../data/London-Loop-SWC-Walk-L24.kml",
                       drivers = "KML", quiet=TRUE)
london_capital <- st_read("../data/Capital-Ring-SWC-Walk-L23.kml",
                          drivers="KML", quiet=TRUE)
listings_geo <- st_as_sf(listings,
                         coords = c("longitude", "latitude"))
Creación de paneles con shinydashboard

Tipos de objetos sf: MULTIPOLYGON

london_poly$geometry
Conjunto de geometrías para 33 elementos 
Tipo de geometría: MULTIPOLYGON

Dimensión: XY Caja envolvente: xmin: -0.508813 ymin: 51.28691 ... CRS geodésico: WGS 84 Primeras 5 geometrías: MULTIPOLYGON (((-0.183361 51.66868, -0.183383 5... MULTIPOLYGON (((0.158044 51.50904, 0.156309 51.... MULTIPOLYGON (((-0.212138 51.55558, -0.212689 5... MULTIPOLYGON (((0.076463 51.431, 0.075932 51.43... MULTIPOLYGON (((-0.140804 51.56946, -0.14081 51...

Polígono aleatorio con 10 lados.

Polígono aleatorio con 15 lados.

Creación de paneles con shinydashboard

Tipos de objetos sf: LINESTRING

london_loop$geometry
Conjunto de geometrías para 1 elemento 
Tipo de geometría: LINESTRING
Dimensión:       XYZ
Caja envolvente: xmin: -0.499406 ymin: 51.29375 xmax: 0.257656 ymax: 51.67563
rango z:         zmin: 0 zmax: 174
CRS geodésico:   WGS 84
LINESTRING Z (0.236477 51.48095 1, 0.235149 51....

Lo mismo para london_capital

Creación de paneles con shinydashboard

Tipos de objetos sf: POINT

listings_geo$geometry
Conjunto de geometrías para 69351 elementos 
Tipo de geometría: POINT
Dimensión:       XY
Caja envolvente: xmin: -0.5236 ymin: 51.27248 xmax: 0.30515 ymax: 51.70893
CRS:             NA
Primeras 5 geometrías:
POINT (-0.05396 51.52874)
POINT (-0.1127 51.56861)
POINT (-0.07426 51.52851)
POINT (-0.10484 51.52478)
POINT (-0.20004 51.51464)
Creación de paneles con shinydashboard

Trazar polígonos con plot()

  • Usa st_geometry() para crear polígonos
  • Usa plot()
  • Rellena cada polígono con un color distinto con col
plot(st_geometry(london_poly), axes=TRUE, 
                border=grey(0.2, 0.5))
plot(st_geometry(london_poly), 
        col = sf.colors(length(london_poly$Name), 
                        categorical = TRUE), 
        axes=TRUE, border=grey(0.2, 0.5))

Gráficos multipolígono sin relleno.

Gráficos multipolígono con relleno.

Creación de paneles con shinydashboard

Trazar líneas con plot()

  • Usa st_geometry() para crear polilíneas de london_loop
    • Pon add en TRUE
    • Cambia col a azul
  • Haz lo mismo para london_capital
plot(st_geometry(london_loop),

add=TRUE,
col="blue")
plot(st_geometry(london_capital), add=TRUE, col="darkgreen")

Mapa con un camino circular.

Mapa con dos caminos circulares.

Creación de paneles con shinydashboard

Trazar puntos con plot()

  • Añade puntos con st_geometry()
    plot(st_geometry(listings_geo), add=TRUE, col='red')
    

Trazado de puntos sf.

Creación de paneles con shinydashboard

Trazar polígonos con ggplot()

  • Podemos usar ggplot() para trazar capas de sf
  • Hay que alinear el sistema de referencia de coordenadas (CRS) de ambas capas

Mapa geoespacial creado con ggplot.

num_listings <- listings %>% 
  group_by(neighbourhood) %>%
  summarize(`Number of listings` = n(),
            longitude = mean(longitude),
            latitude = mean(latitude),
            .groups = "drop") %>%

st_as_sf(coords = c("longitude", "latitude"))
st_crs(num_listings) <- st_crs(london_poly)
ggplot_map <- ggplot(london_poly) + geom_sf(aes(fill = Name)) +
geom_sf_label(data=num_listings, aes(label=`Number of listings`)) + theme_classic()
Creación de paneles con shinydashboard

¡Vamos a practicar!

Creación de paneles con shinydashboard

Preparing Video For Download...