20  Géocodage

20.1 Géocodage d’adresse avec tidygeocoder

Plusieurs packages permettent de géocoder des adresses. Le package tidygeocoder (Cambon et al., 2021) permet d’utiliser un grand nombre de services de géocodage en ligne.

library(tidygeocoder)
address_df <- data.frame(
  address = c("10 Emma Goldmanweg, 5032MN Tilburg, Netherlands", 
              "19 rue Michel Bakounine, 29600 Morlaix, France")
)

places <- geocode(.tbl = address_df, address = "address", quiet = TRUE)
places
#> # A tibble: 2 × 3
#>   address                                           lat  long
#>   <chr>                                           <dbl> <dbl>
#> 1 10 Emma Goldmanweg, 5032MN Tilburg, Netherlands  51.5  5.04
#> 2 19 rue Michel Bakounine, 29600 Morlaix, France   48.6 -3.82

20.2 Transformer des données long/lat en objet sf

La fonction st_as_sf() permet de créer un objet sf à partir d’un data.frame contenant des coordonnées géographiques.

Ici nous utilisons le data.frame places créé précédement :

library(sf)
place_sf <- st_as_sf(places, 
                     coords = c("long", "lat"), 
                     crs = 'EPSG:4326')
place_sf
#> Simple feature collection with 2 features and 1 field
#> Geometry type: POINT
#> Dimension:     XY
#> Bounding box:  xmin: -3.816434 ymin: 48.59041 xmax: 5.038699 ymax: 51.53649
#> Geodetic CRS:  WGS 84
#> # A tibble: 2 × 2
#>   address                                                     geometry
#> * <chr>                                                    <POINT [°]>
#> 1 10 Emma Goldmanweg, 5032MN Tilburg, Netherlands  (5.038699 51.53649)
#> 2 19 rue Michel Bakounine, 29600 Morlaix, France  (-3.816435 48.59041)

Pour créer un objet sf de type POINT à partir d’une paire de coordonnées, ici le point de longitude 0.5 et de latitude 45.5 en WGS84 (EPSG:4326), il est nécessaire de créer le data.frame au préalable :

library(sf)
df_pt <- data.frame(x = 0.5, y = 45.5)
mon_point <- st_as_sf(df_pt, coords = c("x", "y"), crs = 'EPSG:4326')
mon_point
#> Simple feature collection with 1 feature and 0 fields
#> Geometry type: POINT
#> Dimension:     XY
#> Bounding box:  xmin: 0.5 ymin: 45.5 xmax: 0.5 ymax: 45.5
#> Geodetic CRS:  WGS 84
#>           geometry
#> 1 POINT (0.5 45.5)

20.3 Affichage sur un fond OpenStreetMap

Nous pouvons afficher cet objet sf sur un fond de carte OpenStreetMap avec le package maptiles (Giraud, 2023).

library(mapsf)
library(maptiles)

# Récupération d'un fond de carte OSM
osm <- get_tiles(x = place_sf, zoom = 7)

# Affichage
mf_raster(osm)
mf_map(place_sf, pch = 4, cex = 2, 
       lwd = 2, col = "red", add = TRUE)