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]
getCommCenterOn 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"