8  Mesures

8.1 Créer une matrice de distances

La fonction st_distance() permet de calculer une matrice de distance entre deux couches de points.
Si le système de projection du jeu de données est renseigné, les distances sont exprimées dans l’unité de mesure de la projection (le plus souvent en mètres).

library(sf)
com <- st_read("data/lot.gpkg", layer = "communes", quiet = TRUE, agr = "constant")
# transformation de la couche com en couche de points
com_c <- st_centroid(com)
mat <- st_distance(x = com_c, y = com_c)
mat[1:5,1:5]
#> Units: [m]
#>           [,1]     [,2]     [,3]     [,4]      [,5]
#> [1,]     0.000 56784.77 54353.94 61166.42  3790.688
#> [2,] 56784.770     0.00 12454.29  7146.11 57288.103
#> [3,] 54353.942 12454.29     0.00 19388.52 54030.811
#> [4,] 61166.418  7146.11 19388.52     0.00 62016.141
#> [5,]  3790.688 57288.10 54030.81 62016.14     0.000

8.2 Calcul de superficies

La fonction st_area() permet de calculer des superficies.

st_area(com[1:5, ])
#> Units: [m^2]
#> [1] 21721665  3813205 13024216  9993074  5540367

8.3 Convertir des unités

Le package units (Pebesma et al., 2016) permet de définir et convertir facilement des unités de mesure.
Le package peut se révéler assez utile quand nous manipulons différentes unités de mesures régulièrement.

library(units)
#> udunits database from /usr/share/xml/udunits/udunits2.xml
distances <- c(1, 2, 3, 5, 0.5)
surfaces <- c(500, 1000, 10000, 20000)

# définition des unités de mesure initiales
distances <- set_units(distances, "km")
distances
#> Units: [km]
#> [1] 1.0 2.0 3.0 5.0 0.5
surfaces <- set_units(surfaces, "m2")
surfaces
#> Units: [m^2]
#> [1]   500  1000 10000 20000
# transformation des unités de mesure
distances <- set_units(distances, "m")
distances
#> Units: [m]
#> [1] 1000 2000 3000 5000  500
surfaces <- set_units(surfaces, "ha")
surfaces
#> Units: [ha]
#> [1] 0.05 0.10 1.00 2.00
## Suppression des unités
distances <- set_units(distances, NULL)
distances
#> [1] 1000 2000 3000 5000  500
surfaces <- set_units(surfaces, NULL)
surfaces
#> [1] 0.05 0.10 1.00 2.00