Comment lire le contenu d'un shapefile avec R ?

Un shapefile est un fichier d’information géographique avec un format vectoriel. Il permet de représenter des points (e.g. villes), des lignes (e.g. routes) et des polygones (e.g. départements) avec un système d’information géographique. Le format shapefile est composé de plusieurs fichiers séparés (4 minimum):

  • data.shp : informations de géométrie (coordonnées)
  • data.prj : information de système de projection
  • data.dbf : table des attributs
  • data.shx : indice de position des géométries

Dans R, deux packages majeurs sont utilisés pour manipuler les données géographiques de type vectoriel:

  • {sp} : Le package de référence. Il utilise notamment la librairie {rgdal} pour lire les données géographiques, un package utilisant la librairie gdal (http://www.gdal.org/).
  • {sf} : Sorti sur CRAN en 2017, il permet de travailler avec les objets vectoriels avec toutes les fonctions du {tidyverse}. Il utilise gdal de manière native.

Lire le contenu d’un shapefile avec la librairie {sp}

Le shapefile sera lu directement avec la librairie {rgdal}. Il pourra ensuite être utilisé avec les différentes fonctions du package {sp}.
Un shapefile contient toujours plusieurs fichiers ayant tous le même nom mais une extension différente. Pour le lire avec la fonction rgdal de la librarie {sp} , il faut donner le dossier (dsn) dans lequel il est sauvé et le nom de la couche (layer) sans extension.

library(rgdal)
library(sp)
shp <- readOGR(dsn = 'chemin/vers/dossier',
        layer = 'NomDeCoucheSansExtension')

Vous pourrez ensuite récupérer les informations suivantes:

  • projection
proj4string(shp)
  • coordonnées des objets (pertinent pour les fichiers de points)
coordinates(shp)
  • Les données de la table attributaire sans l’information géographique
shp@data
# ou
data.frame(shp)

Lire le contenu d’un shapefile avec la librairie {sf}

Comme pour {rgdal}, la lecture du shapefile se fait en spécifiant le dossier (dsn) et le nom de la couche (layer) sans extension.

library(sf)
shp <- st_read(dsn = 'chemin/vers/dossier',
        layer = 'NomDeCoucheSansExtension')

Vous pourrez ensuite récupérer les informations suivantes:

  • projection
st_crs(shp)
  • coordonnées des objets. Les coordonnées des lignes et des polygones sont fournies avec les identifiants des lignes / sous-lignes ou polygones / sous-polygones auxquels ils appartiennent.
st_coordinates(shp)
  • Les données de la table attributaire sans l’information géographique. Les opérations classiques sur les tables de données peuvent être réalisées directement l’objet shp.
data.frame(shp)