Cartes géospatiales avec sf

Créer des tableaux de bord avec shinydashboard

Png Kee Seng

Researcher

Introduction à sf

  • Utiliser sf pour créer des cartes géospatiales
    • Abréviation de « simple features »
  • Une visualisation sf se crée toujours en couches
    • Comme des couches de coups de pinceau sur une toile blanche
    • Nous n'approfondirons pas les visualisations géospatiales

Coups de pinceau sur une toile blanche.

1 Image par rawpixel.com sur Freepik
Créer des tableaux de bord avec shinydashboard

Importer la bibliothèque et les données géospatiales

  • Importer sf et tidyverse
  • Utiliser st_read() et st_as_sf() pour lire des fichiers Keyhole Markup Language (KML)
    • london_poly : limites géospatiales de Londres
    • london_loop : trajet (presque) circulaire autour de Londres
    • london_capital : trajet circulaire reliant des parties du centre de Londres
    • listings_geo : coordonnées des annonces 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"))
Créer des tableaux de bord avec shinydashboard

Différents types d'objets sf : MULTIPOLYGON

london_poly$geometry
Ensemble de géométries pour 33 entités 
Type de géométrie : MULTIPOLYGON

Dimension : XY Boîte englobante : xmin: -0.508813 ymin: 51.28691 ... CRS géodésique : WGS 84 5 premières géométries : 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...

Polygone aléatoire à 10 côtés.

Polygone aléatoire à 15 côtés.

Créer des tableaux de bord avec shinydashboard

Différents types d'objets sf : LINESTRING

london_loop$geometry
Ensemble de géométries pour 1 entité 
Type de géométrie : LINESTRING
Dimension :     XYZ
Boîte englobante :  xmin: -0.499406 ymin: 51.29375 xmax: 0.257656 ymax: 51.67563
z_range :       zmin: 0 zmax: 174
CRS géodésique :  WGS 84
LINESTRING Z (0.236477 51.48095 1, 0.235149 51....

Idem pour london_capital

Créer des tableaux de bord avec shinydashboard

Différents types d'objets sf : POINT

listings_geo$geometry
Ensemble de géométries pour 69351 entités 
Type de géométrie : POINT
Dimension :     XY
Boîte englobante :  xmin: -0.5236 ymin: 51.27248 xmax: 0.30515 ymax: 51.70893
CRS :           NA
5 premières géométries :
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)
Créer des tableaux de bord avec shinydashboard

Tracer des polygones avec plot()

  • Utiliser st_geometry() pour créer des polygones
  • Utiliser plot()
  • Remplir chaque polygone avec une couleur différente via 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))

Tracés multipolygones sans remplissage de couleur.

Tracés multipolygones avec remplissage de couleur.

Créer des tableaux de bord avec shinydashboard

Tracer des lignes avec plot()

  • Utiliser st_geometry() pour créer des polylignes pour london_loop
    • Régler add à TRUE
    • Changer col en bleu
  • Faire de même pour london_capital
plot(st_geometry(london_loop),

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

Carte avec un trajet circulaire.

Carte avec deux trajets circulaires.

Créer des tableaux de bord avec shinydashboard

Tracer des points avec plot()

  • Ajouter des points avec st_geometry()
    plot(st_geometry(listings_geo), add=TRUE, col='red')
    

Tracé de points sf.

Créer des tableaux de bord avec shinydashboard

Tracer des polygones avec ggplot()

  • On peut utiliser ggplot() pour superposer des couches sf
  • Il faut faire correspondre le système de référence de coordonnées (CRS) des deux couches

Carte géospatiale créée avec 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()
Créer des tableaux de bord avec shinydashboard

Passons à la pratique !

Créer des tableaux de bord avec shinydashboard

Preparing Video For Download...