Dans ce notebook, nous allons voir comment intégrer la dimension spatiale (requêtes spatiales), en préparation de la dimension cartographique de l’application Shiny.
Chargeons tidyverse
, et la librairie sf
library(tidyverse)
library(sf)
Lisons nos données administratives AdminExpress en les reprojetant du Lambert 93 (EPSG:2154) vers le WGS84 (EPSG:4326) :
comms <- st_read("../data/COMMUNE_CARTO/COMMUNE_CARTO.shp") %>%
st_set_crs(2154) %>%
st_transform(4326)
Exportons les données sur la Région Sud pour un usage ultérieur, dans l’application Shiny par exemple :
saveRDS(comms %>% filter(INSEE_REG == 93), "comms.rds")
comms <- readRDS("../data/comms.rds")
Lorsqu’on cliquera sur la carte dans l’appli Shiny, les coordonnées seront retournées à l’utilisateur sous cette forme :
$lat
[1] 43.2829
$lng
[1] 6.2507
$.nonce
[1] 0.8278805
On crée un point depuis les coordonnées comme ceci :
pt <- c(6.2507, 43.2829) %>% st_point %>% st_sfc %>% st_set_crs(4326)
On intersecte les communes avec le point :
i <- st_intersects(comms, pt)
On détermine la commune localisée au point :
w <- which(sapply(i, function(x) length(x) != 0))
codeInsee <- comms$INSEE_COM[w]
getCommCenter
On peut en faire une fonction getCommCenter
:
getCommCenter <- function(comms, coords) {
pt <- coords %>% st_point %>% st_sfc %>% st_set_crs(4326)
i <- st_intersects(comms, pt)
w <- which(sapply(i, function(x) length(x) != 0))
codeInsee <- comms$INSEE_COM[w]
return(codeInsee)
}
Utilisons par exemple la fonction pour trouver la commune qui se situe au point de coordonnées 5.398602, 43.53609
:
comms %>% getCommCenter(c(5.398602, 43.53609))
## [1] "13001"