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()