Voici quelques lignes de code pour vous accompagner à réaliser
simplement une première carte à partir de données disponibles sur une
plateforme de données.
J’ai choisi de ne traiter ici que des données vectorielles (pas
d’images ou raster). Toutes les données sont disponibles sur le portail
open data de Montpellier Mediterranée Métropole (MMM: https://data.montpellier3m.fr/).
1.1 Les librairies
Pour cette brève présentation, vous aurez besoin des librariries
{sf} et {tmap}, sans oublier l’incontournable
{tidyverse}.
Il faut distinguer la manipulation des données de la visualisation
des données.
Le package {sf} (Spatial Feature) est dédié à la
manipulation, la transformation et l’analyse de données spatiales. A la
manière du Tidyverse, il combine les fonctionnalités de
{sp}, {rgeos} et {rgdal} dans un
package.
Le package {tmap} (thematic map) est quant à lui dédié à
la visualisation des données spatiales. Cette fois-ci, à la manière du
package {ggplot2}.
library(tidyverse)
library(sf)
library(tmap)
1.2 Les données
Les données brutes peuvent avoir de multiples formats:
shapefile
geojson
csv
DBI (PostGIS)
gpkg
…
1.2.1 Import des
données
Nous utiliserons la fonction st_read() du package
{sf}. Les données des exemples sont disponibles sur la
plateforme open data de MMM. Vous pouvez bien sûr remplacer le chemin
(l’url) par le chemin de données sur votre machine!
Les données spatiales dans R sont de classe sf. Mais
on constate aussi qu’elles sont de classes tbl_df,
tbl et data.frame. Des classes
d’objets que l’on connait bien et que nous manipulons au quotidien
🙂
1.2.3 Manipuler des
données spatiales
Les fonctions du tidyverse permettent de manipuler les tables.
On constate qu’il y a systématiquement une colonne nommée
geometry dans nos tables. Cette colonne geometry
contient les coordonnées géographiques des individus (lignes). Pour
faire simple, elles peuvent être :
Un point (POINT) ou plusieurs points (MULTIPOINT)
Une ligne (LINESTRING) ou plusieurs points (MULTILINESTRING)
Un polygone (POLYGON) ou plusieurs points (MULTIPOLYGON)
1.2.4 Regrouper ou
fusionner les geométries
Il suffit d’utiliser la fonction summarise() du package
dplyr.
Si on souhaite traiter la table comme une table classique (regrouper
sur des caractéristiques), il suffit d’utiliser la fonction
as_tibble du package dplyr.
Au fil du temps, j’ai choisi le package {tmap} car il
répond parfaitement à mon besoin de faire des cartes rapidement et
plutôt jolies. Il a la même logique que ggplot2 (qui permet aussi de
faire des cartes), couvre un large spectre de types de données spatiales
et, c’est peut-être pour moi l’essentiel, me permet de réaliser avec le
même code des cartes interactives ou statiques.
1.3.1 Une première
carte
Pour cette première carte, nous allons afficher l’ensemble des
aménagements cyclables de MMM. Il s’agit donc de lignes. On initialise
toujours une carte dans un premier temps avec la fonction
tm_shape() (un peut comme ggplot) puis on appelle la
fonction appropriée aux géométries. Ici on appelle
tm_lines().
Vous pourrez superposer plusieurs cartes sans problème. Attention, il
faudra vous assurer au préalable qu’elles aient la même projection avec
st_crs().
# Contours des communes de Montpellier Méditerranée Métropole
# https://data.montpellier3m.fr/dataset/contours-des-communes-de-montpellier-mediterranee-metropole
Contours_communes_MMM <- read_sf("https://data.montpellier3m.fr/sites/default/files/ressources/MMM_MMM_Limites.geojson")
# Contours de Montpellier Méditerranée Métropole
# https://data.montpellier3m.fr/dataset/contours-de-montpellier-mediterranee-metropole
Contours_MMM <- read_sf("https://data.montpellier3m.fr/sites/default/files/ressources/MMM_MMM_Contours.geojson")
st_crs(OSM_MMM_BNAC)==st_crs(Contours_communes_MMM)
## [1] TRUE
Si elles n’ont pas la même projection, vous pourres toujours utiliser
st_transform().
En remplacant, le paramètre col qui jusque là contenait une valeur
hexadécimale correspondant à un splendide vert, vous associerez alors
une couleur à une modalité. Comme ici, où la variable ame_d de la table
OSM_MMM_BNAC qualifie chaque type d’aménagement cyclable:
Vous n’aurez pas besoin de maîtriser ce package pour faire vos
premières cartes interactives. Il vous suffira d’appliquer la fonction
tmap_leaflet() à une carte tmap créée pour la rendre
interactive (à la manière de ggplotly() pour un graphique
ggplot).
tmap_leaflet(carte3)
1.4 Transformer un
dataframe avec des variables latitude et longitude en sf
Il nous arrive parfois de devoir convertir un data frame en sf. C’est
en particulier le cas quand on reçoit un fichier avec des coordonnées
géographiques (longitude,latitude).
Il vous suffira d’utiliser la fonction st_as_sf() pour
transformer votre table en objet spatial (sf) dans laquelle vous
preciser les colonnes contenant les longitudes et latitudes.
1 Comment réaliser une carte avec R ?
Voici quelques lignes de code pour vous accompagner à réaliser simplement une première carte à partir de données disponibles sur une plateforme de données.
J’ai choisi de ne traiter ici que des données vectorielles (pas d’images ou raster). Toutes les données sont disponibles sur le portail open data de Montpellier Mediterranée Métropole (MMM: https://data.montpellier3m.fr/).
1.1 Les librairies
Pour cette brève présentation, vous aurez besoin des librariries
{sf}
et{tmap}
, sans oublier l’incontournable{tidyverse}
.Il faut distinguer la manipulation des données de la visualisation des données.
Le package
{sf}
(Spatial Feature) est dédié à la manipulation, la transformation et l’analyse de données spatiales. A la manière du Tidyverse, il combine les fonctionnalités de{sp}
,{rgeos}
et{rgdal}
dans un package.Le package
{tmap}
(thematic map) est quant à lui dédié à la visualisation des données spatiales. Cette fois-ci, à la manière du package{ggplot2}
.1.2 Les données
Les données brutes peuvent avoir de multiples formats:
1.2.1 Import des données
Nous utiliserons la fonction
st_read()
du package{sf}
. Les données des exemples sont disponibles sur la plateforme open data de MMM. Vous pouvez bien sûr remplacer le chemin (l’url) par le chemin de données sur votre machine!1.2.2 Class des données spatiales
Les données spatiales dans R sont de classe sf. Mais on constate aussi qu’elles sont de classes tbl_df, tbl et data.frame. Des classes d’objets que l’on connait bien et que nous manipulons au quotidien 🙂
1.2.3 Manipuler des données spatiales
Les fonctions du tidyverse permettent de manipuler les tables.
On constate qu’il y a systématiquement une colonne nommée geometry dans nos tables. Cette colonne geometry contient les coordonnées géographiques des individus (lignes). Pour faire simple, elles peuvent être :
1.2.4 Regrouper ou fusionner les geométries
Il suffit d’utiliser la fonction
summarise()
du packagedplyr
.Si on souhaite traiter la table comme une table classique (regrouper sur des caractéristiques), il suffit d’utiliser la fonction
as_tibble
du packagedplyr
.On peut extraire des informations des géométries:
st_length()
du package{sf}
st_area()
du package{sf}
1.3 Visualiser les données
Au fil du temps, j’ai choisi le package
{tmap}
car il répond parfaitement à mon besoin de faire des cartes rapidement et plutôt jolies. Il a la même logique que ggplot2 (qui permet aussi de faire des cartes), couvre un large spectre de types de données spatiales et, c’est peut-être pour moi l’essentiel, me permet de réaliser avec le même code des cartes interactives ou statiques.1.3.1 Une première carte
Pour cette première carte, nous allons afficher l’ensemble des aménagements cyclables de MMM. Il s’agit donc de lignes. On initialise toujours une carte dans un premier temps avec la fonction
tm_shape()
(un peut comme ggplot) puis on appelle la fonction appropriée aux géométries. Ici on appelletm_lines()
.En fonction du type de géométries, on choisira (pour faire simple) la fonction adaptée:
tm_dots()
,tm_bubbles()
,tm_symbols()
,tm_markers()
les pointstm_lines()
pour les lignestm_borders()
,tm_fill()
,tm_polygons()
pour les polygones1.3.2 Ajouter un titre
1.3.3 Ajouter une flêche nord
Les cartographes aiment qu’on leur rappelle le nord. Pas de problèmes avec la fonction
tm_compass
:1.3.4 Ajouter la source
Afficher la source des données fait partie des bonnes pratiques aussi. Là encore, on assure le coup avec
tm_credits()
🙂1.3.5 Superposer des couches
Vous pourrez superposer plusieurs cartes sans problème. Attention, il faudra vous assurer au préalable qu’elles aient la même projection avec
st_crs()
.Si elles n’ont pas la même projection, vous pourres toujours utiliser
st_transform()
.1.3.6 Carte thématique
En remplacant, le paramètre col qui jusque là contenait une valeur hexadécimale correspondant à un splendide vert, vous associerez alors une couleur à une modalité. Comme ici, où la variable ame_d de la table OSM_MMM_BNAC qualifie chaque type d’aménagement cyclable:
La même carte avec une petite mise en forme…
1.3.7 Les facettes
Comme sur ggplot2, on a la possibilité de réaliser des facettes. C’est parfois utile:
1.3.8 Interactivité
leaflet est une librairie javascript qui permet de réaliser des cartes interactives: https://leafletjs.com/
Cette librairie est à l’origine du package
{leaflet}
qui permet de créer des cartes interactives: https://rstudio.github.io/leaflet/Vous n’aurez pas besoin de maîtriser ce package pour faire vos premières cartes interactives. Il vous suffira d’appliquer la fonction
tmap_leaflet()
à une carte tmap créée pour la rendre interactive (à la manière deggplotly()
pour un graphique ggplot).1.4 Transformer un dataframe avec des variables latitude et longitude en sf
Il nous arrive parfois de devoir convertir un data frame en sf. C’est en particulier le cas quand on reçoit un fichier avec des coordonnées géographiques (longitude,latitude).
Il vous suffira d’utiliser la fonction
st_as_sf()
pour transformer votre table en objet spatial (sf) dans laquelle vous preciser les colonnes contenant les longitudes et latitudes.Une fois transformer, on peut bien sûr créer une nouvelle carte:
Et même apporter un peu d’interactions!
Alors, on se met en selle 🚴 ?