6  Sélection et jointure spatiale

6.1 Sélection spatiale

La fonction st_filter() permet d’effectuer des sélections spatiales. L’argument .predicate permet de choisir sur quel critère se fait la sélection en utilisant l’une des fonctions de “prédicat géométrique” (par exemple st_intersects(), st_within(), st_crosses()…).
Nous allons ici sélectionner les routes qui intersectent la commune de Gramat

route <- st_read("data/lot.gpkg", layer = "routes", quiet = TRUE)
gramat <-  com[com$NOM_COM == "Gramat", ]
      
route_gramat <-  st_filter(x = route, 
                           y = gramat,
                           .predicate = st_intersects)

# Affichage     
mf_map(gramat, col = "lightblue")
mf_map(route, add = TRUE)
mf_map(route_gramat, col = "tomato", lwd = 2, add = TRUE)  

6.2 Jointure spatiale

La fonction st_join() permet de réaliser des jointures spatiales. Cette fois-ci c’est l’argument join qui utilise une fonction de prédicat géométrique.

route_gramat <-  st_join(x = route,
                         y = com[, "INSEE_COM"],
                         join = st_intersects,
                         left = FALSE)
route_gramat
#> Simple feature collection with 1247 features and 3 fields
#> Geometry type: LINESTRING
#> Dimension:     XY
#> Bounding box:  xmin: 587147.6 ymin: 6394844 xmax: 608194.7 ymax: 6420006
#> Projected CRS: RGF93 v1 / Lambert-93
#> First 10 features:
#>     ID      CLASS_ADM INSEE_COM                           geom
#> 1    1 Départementale     46240 LINESTRING (590557.5 641181...
#> 2    2 Départementale     46240 LINESTRING (593733.2 641429...
#> 3    3 Départementale     46240 LINESTRING (590665 6412381,...
#> 4    4 Départementale     46128 LINESTRING (598940.9 640909...
#> 5    5 Départementale     46104 LINESTRING (603201.9 640181...
#> 6    6     Sans objet     46235 LINESTRING (598162.3 640108...
#> 7    7 Départementale     46090 LINESTRING (598887.3 639763...
#> 7.1  7 Départementale     46138 LINESTRING (598887.3 639763...
#> 7.2  7 Départementale     46233 LINESTRING (598887.3 639763...
#> 8    8 Départementale     46090 LINESTRING (601184.3 639697...

Exercice

  1. Importez la couche des communes et celle des restaurants du Lot.

  2. Réaliser une jointure spatiale pour connaître pour chaque restaurant le nom et l’identifiant de la commune dans laquelle il se trouve.