Restart_7: Objets spatiaux

Lise Vaudor

21/09/2020

Package sf

Un package R qui fournit des méthodes standardisées pour encoder de la donnée spatiale vectorielle.

sf s’inscrit dans la logique du tidyverse, c’est-à-dire qu’il est compatible (entre autres) avec les principes de dplyr et ggplot2 pour ce qui est, respectivement, de la manipulation des tableaux d’attributs et de la production des cartes.

sf pour “simple features”.

Feature un objet dans le monde réel. Les “features” ont

  • une géométrie
  • des attributs
library(sf)
L’ensemble des fonctions du package sont facilement reconnaissables puisqu’elles commencent toutes par st_...() (st pour spatial et temporal).

Géométries

Les géométries peuvent être de type

  • point
  • linestring
  • polygon

pour des objets individuels

Plus fréquemment, on a affaire à des géométries de type

  • multipoint
  • multilinestring
  • multipolygon

Remarque:Simple feature geometry: sfg

Lecture/écriture de données spatiales vectorielles

La lecture se fait tout simplement à l’aide de la fonctionst_read()

filename=system.file("shape/nc.shp", package="sf") # ex. de fichier shape téléchargé avec package sf
filename
[1] "/data/user/v/lvaudor/R/x86_64-pc-linux-gnu-library/3.6/sf/shape/nc.shp"
nc <- st_read(filename)
Reading layer `nc' from data source `/data/user/v/lvaudor/R/x86_64-pc-linux-gnu-library/3.6/sf/shape/nc.shp' using driver `ESRI Shapefile'
Simple feature collection with 100 features and 14 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
Geodetic CRS:  NAD27

plus d’infos sur la nature des attributs ici

A la lecture, quelques descripteurs de base de l’objet sf sont affichés:

  • le chemin
  • le driver utilisé pour lire le fichier (ici ESRI shapefile)
  • le nombre de features (ici 100) et le nombre d’attributs (ici 14)
  • les dimensions spatiales de l’objet (ici XY)
  • l’emprise (ou bounding box) de la couche
  • le code EPSG du système de coordonnées
  • le code proj4string du système de projection

Lecture/écriture de données spatiales vectorielles

L’écriture se fait à l’aide de la fonction st_write()

st_write(nc,"datasets/nc/nc.shp")

L’ensemble des fichiers auxiliaires (avec le .shp: .shx, .dbf, .proj) est créé par cette commande.

Notez qu’il est possible d’avoir un aperçu de l’ensemble des couches de données spatiales vectorielles présentes dans un dossier:

st_layers(system.file("shape",package="sf"))
Driver: ESRI Shapefile 
Available layers:
           layer_name        geometry_type
1                  nc              Polygon
2             olinda1              Polygon
3          storms_xyz       3D Line String
4  storms_xyz_feature       3D Line String
5         storms_xyzm Measured Line String
6 storms_xyzm_feature Measured Line String
  features fields
1      100     14
2      470      6
3       71      0
4       71      1
5       71      0
6       71      1

Systèmes de coordonnées et transformations

Connaître le système de coordonnées:

st_crs(nc)
Coordinate Reference System:
  User input: NAD27 
  wkt:
GEOGCRS["NAD27",
    DATUM["North American Datum 1927",
        ELLIPSOID["Clarke 1866",6378206.4,294.978698213898,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["latitude",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["longitude",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    ID["EPSG",4267]]

Indiquer le système de coordonnées:

st_crs(nc) <- 4267

Transformer les coordonnées:

nc.web_mercator <- st_transform(nc, 3857)

Exploration graphique

Notez que la méthode plot() permet de prendre connaissance assez rapidement et facilement du contenu de l’objet sf:

plot(nc, max.plot=4)

sf + dplyr

Le package sf est compatible avec les fonctions de dplyr pour la manipulation de l’objet sf à partir de la table d’attributs. Cela signifie que l’on est en mesure de

  • filtrer les simple features sur leurs attributs,
  • sélectionner certains attributs
  • modifier/ajouter des attributs , ou encore
  • réaliser des jointures.
filter(nc, AREA >0.2) %>%
  plot()

select(nc,AREA) %>%
  plot()

mutate(nc, frac74 = SID74 / BIR74) %>% 
  select(frac74) %>%
  plot()

sf + ggplot

Les objets de type sf sont par ailleurs compatibles avec la logique de ggplot2. Il est notamment possible de les tracer à l’aide du geom geom_sf().

library(ggplot2)
ggplot() +
  geom_sf(data = nc, aes(fill = BIR74)) +
  geom_sf(data= st_centroid(nc), color="yellow", aes(label="NAME"))+
  scale_y_continuous(breaks = 34:36)

Géométries: : mesures

L’ensemble des manipulations sur les géométries permises par le package sf sont explicitées dans cette cheatsheet

Il est ainsi possible de réaliser des mesures telles que

  • l’aire (pour une géométrie polygon/multipolygon)
  • la longueur (pour une géométrie linestring/multilinestring)
  • la distance
nc %>% 
  mutate(aire=st_area(nc)) %>% 
  select(NAME,aire)
Simple feature collection with 100 features and 2 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
Geodetic CRS:  NAD27
First 10 features:
          NAME             aire
1         Ashe 1137388604 [m^2]
2    Alleghany  611077263 [m^2]
3        Surry 1423489919 [m^2]
4    Currituck  694546292 [m^2]
5  Northampton 1520740530 [m^2]
6     Hertford  967727952 [m^2]
7       Camden  615942210 [m^2]
8        Gates  903650119 [m^2]
9       Warren 1179347051 [m^2]
10      Stokes 1232769242 [m^2]
                         geometry
1  MULTIPOLYGON (((-81.47276 3...
2  MULTIPOLYGON (((-81.23989 3...
3  MULTIPOLYGON (((-80.45634 3...
4  MULTIPOLYGON (((-76.00897 3...
5  MULTIPOLYGON (((-77.21767 3...
6  MULTIPOLYGON (((-76.74506 3...
7  MULTIPOLYGON (((-76.00897 3...
8  MULTIPOLYGON (((-76.56251 3...
9  MULTIPOLYGON (((-78.30876 3...
10 MULTIPOLYGON (((-80.02567 3...

Opérations géométriques: construction

Il est possible de créer un objet sf en construisant sa géométrie (création de points, création de lignes à partir de points, de polygones à partir de points, etc.)

M=matrix(c(1,0,2,1,2,2),nrow=3)
M
     [,1] [,2]
[1,]    1    1
[2,]    0    2
[3,]    2    2
pts=st_multipoint(M, dim="XY")
ggplot(pts)+geom_sf()

Opérations géométriques: relations

Il est également possible de vérifier les relations géométriques entre objets sf (est-ce que tel objet croise tel autre, est-ce que ces polygones se touchent, se recouvrent, sont disjoints, etc.)

Exemple: est-ce que les polygones contiennent les points?

st_contains(pol,pts)
Sparse geometry binary predicate list of length 2, where the predicate was `contains'
 1: 1, 2
 2: 2
st_contains(pol,pts,sparse=FALSE)
      [,1] [,2]  [,3]
[1,]  TRUE TRUE FALSE
[2,] FALSE TRUE FALSE

Géométries: opérations

Il est possible de réaliser des opérations sur les géométries (différences, intersections, union, etc.)

pol
Simple feature collection with 2 features and 1 field
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: 0 ymin: 0 xmax: 2.25 ymax: 2.5
CRS:           NA
# A tibble: 2 x 2
  nom                                     geometry
  <chr>                                  <POLYGON>
1 pol1                 ((0 0, 2 0, 2 2, 0 2, 0 0))
2 pol2  ((1 1.15, 2.25 1.15, 2.25 2.5, 1 2.5, 1 1…
pol_reunited=st_union(pol)
ggplot(pol_reunited)+geom_sf()

On récapitule!

On a parlé de quoi, déjà?
  • Principe de “sf” (attributs + geometry)
  • Différents types de simple features
    • POINT/MULTIPOINT,
    • LINESTRING/MULTILINESTRING,
    • POLYGON/MULTIPOLYGON,
    • etc.
  • Compatibilité avec tidyverse (dplyr,ggplot2)
  • Opérations sur les géométries
    • mesures
    • construction
    • évaluation
    • opérations