Le package leaflet
permet de créer des cartes géographiques interactives avec R
. Les cartes sont générées avec la librairie Leaflet
de JavaScript
. Les cartes s’affichent rapidement et permettent de montrer de l’information de plusieurs façons. Ce package ressemble un peu à celui de ggplot2
, dans le sens que chaque information supplémentaire ajoutée correpond à une ligne de code généralement simple.
Plusieurs options sont disponibles, comme ajouter des marqueurs ou des surfaces afin de mieux visualiser les données. Les résultats produits sont faits avec OpenStreetMap
, qui est facile d’utilisation et qui permet de créer des cartes libres de droits.
Pour installer le package, il suffit d’exécuter la ligne suivante:
install.packages("leaflet")
Afin d’utiliser le package, il faut exécuter la ligne suivante:
library(leaflet)
Le package leaflet
fonctionne par étapes. Tout d’abord, il faut créer une carte (nommée widget
dans la documentation) en faisant appel à la fonction leaflet()
. Pour contrôler la grandeur de la carte, il faut modifier les paramètres de la fonction leaflet
. Par la suite, on ajoute des couches à cette carte de base. Plusieurs options sont possibles: marqueurs, polygones, points colorés, boutons, etc.
Le tableau suivant contient certaines fonctions utiles pour personnaliser les cartes:
Fonction | Description |
---|---|
addProviderTiles addTiles | Choisir la couche de fond |
addMarkers addAwesomeMarkers addCircleMarkers | Ajoute des marqueurs personnalisés |
addPopups | Ajoute une bulle avec de l’information |
addPolygons addCircles addRectangles | Ajoute des surfaces en forme de polygones, de cercles ou rectangles |
addLegend | Ajoute une légende |
addMeasure | Ajoute un bouton qui permet de mesurer des distances et des surfaces |
addEasyButton | Ajoute un bouton avec un niveau de zoom prédéfini |
Souvent, les premiers arguments utilisés pour ces fonctions sont le nom de carte, la longitude et la latitude des points à visualiser. Pour visualiser la carte, il faut simplement faire appel à l’objet dans lequel la carte est stockée.
Cette section contient des exemples de cartes qu’il est possible de réaliser avec le package leaflet
.
Il est plutôt simple de mettre en évidence un point sur une carte lorsqu’on connait les coordonnées GPS. Prenons un exemple avec le pavillon Pouliot de l’Université Laval.
Tout d’abord, on garde les coordonnées du pavillon dans l’objet pouliot
.
<- c(latitude = 46.779495, longitude = -71.275398) pouliot
Ensuite, on stocke la carte dans l’objet carte_pouliot
. À l’aide de la fonction leaflet
, on modifie la largeur et la hauteur par défaut.
<- leaflet(width = 910, height = 240) carte_pouliot
Avec la fonction addTiles
, on ajoute les tuiles de fond provenant de OpenStreetMap
.
<- addTiles(carte_pouliot) carte_pouliot
La fonction addMarkers
permet d’ajouter du texte en glissant le curseur sur le point.
<- addMarkers(
carte_pouliot map = carte_pouliot,
lng = pouliot["longitude"],
lat = pouliot["latitude"],
label = "Université Laval, Pavillon Pouliot" # Texte en glissant le curseur
)
Voici une autre façon d’ajouter du texte avec la fonction addPopups
. Il s’agit d’un popup qui disparaît lorsqu’on clique quelque part dans la carte.
<- addPopups(
carte_pouliot map = carte_pouliot,
lng = pouliot["longitude"],
lat = pouliot["latitude"],
popup = "Université Laval, Pavillon Pouliot", # Texte qui apparaît au début
options = popupOptions(closeButton = FALSE)
)
On ajoute aussi un bouton permettant de mesurer des distances et des superficies. La fonction addMeasure
ajoute un bouton avec une équerre dessus. On choisit le mètre et le mètre carré pour les unités de mesures.
<- addMeasure(
carte_pouliot map = carte_pouliot,
position = "bottomleft",
primaryLengthUnit = "meters",
primaryAreaUnit = "sqmeters",
activeColor = "#FF0000",
completedColor = "#7D4479"
)
Finalement, on affiche la carte.
carte_pouliot
Il est parfois pratique de montrer plusieurs points sur une même carte. L’exemple qui suit a été produit avec le data frame quakes
du package datasets
. Ces données représentent la position géographique, la magnitude et la profondeur de plusieurs séismes près des îles Fidji. Une variable contient aussi le nombre de stations sismiques qui ont rapporté chaque tremblement de terre. La colonne region
a été ajoutée selon la longitude.
Dans cet exemple, on peut obtenir d’autres informations sur les points. En glissant le curseur, on obtient la magnitude du séisme et en cliquant on obtient les coordonnées GPS.
Tout d’abord, on appelle le package datasets
et on ajoute la variable.
library(datasets)
$region <- factor(quakes$long >= 175, labels = c("Ouest", "Est")) quakes
On ajoute ensuite la couleur en fonction de la région avec la fonction colorFactor
.
<- colorFactor(c("blue", "red"), domain = c("Est", "Ouest")) quake_couleur
On stocke ensuite la carte dans l’objet carte_quake
.
<- leaflet() carte_quake
On utilise la fonction addTiles
pour le fond de carte.
<- addTiles(carte_quake) carte_quake
Avec la fonction addCircleMarkers
, on ajoute des marqueurs en forme de cercle. On ajoute également un popup qui contient la magnitude en glissant le curseur et les coordonnées en cliquant.
<- addCircleMarkers(
carte_quake map = carte_quake,
lng = quakes$long,
lat = quakes$lat,
popup = paste("Latitude:", quakes$lat, ", longitude:", quakes$long),
label = paste("Magnitude", quakes$mag),
color = quake_couleur(quakes$region),
radius = quakes$depth/100 # Rayon des points. On divise par 100, sinon les points sont trop gros.
)
La fonction addProviderTiles
permet de changer le fond de la carte.
<- addProviderTiles(
carte_quake map = carte_quake,
provider = providers$Stamen.Watercolor
)
On ajoute ensuite la légende des couleurs avec la fonction addLegend
.
<- addLegend(
carte_quake map = carte_quake,
position = "topright",
pal = quake_couleur,
values = quakes$region,
title = "Région",
opacity = 1
)
Finalement, on affiche le résultat.
carte_quake
Il existe plusieurs fonds de carte. Pour avoir la liste complète disponible, il suffit d’exécuter la commande suivante:
names(providers)
Lorsqu’il y a plusieurs points à montrer à la fois, il est possible de faire une carte avec des groupes qui varient selon le niveau de zoom.
On stocke la carte dans l’objet carte_groupe
.
<- leaflet() carte_groupe
On ajoute ensuite le fond de carte OpenStreetMap
.
<- addTiles(carte_groupe) carte_groupe
Avec la fonction addMarkers
, on ajoute des points qui sont groupés selon le niveau de zoom. On ajoute également le nombre de stations ayant détecté le séisme lorsqu’on clique sur un point.
<- addMarkers(
carte_groupe map = carte_groupe,
lng = quakes$long,
lat = quakes$lat,
popup = paste(quakes$stations, "stations ont détecté le séisme"),
clusterOptions = markerClusterOptions()
)
On change le fond de la carte avec la fonction addProviderTiles
.
<- addProviderTiles(
carte_groupe map = carte_groupe,
provider = providers$Stamen.TonerLite
)
On ajoute un bouton qui permet de revenir au zoom initial. Le niveau utilisé est 4 et le bouton est en forme de planète.
<- addEasyButton(
carte_groupe map = carte_groupe,
button = easyButton(
icon = "fa-globe",
title = "Zoom initial",
onClick = JS("function(btn, map){ map.setZoom(4); }")
) )
On affiche la carte.
carte_groupe
Le package leaflet
fonctionne similairement au package ggplot2
. On ajoute des éléments une étape à la fois, un peu comme on le fait avec des graphiques.
Il y a énormément d’options de personnalisation des cartes, que ce soit la couche de fond ou la couleur des points. Les cartes générées sont également très intuitives à utiliser.
Un des points négatifs à ce package est que la documentation manque souvent de clarté. Plusieurs essais et erreurs sont faits avant d’obtenir exactement ce qu’on veut au début. On apprend assez vite comment ça fonctionne toutefois.
Également, bien qu’il y ait plusieurs exemples avec des fonds de carte différents de celui par défaut, il y a plusieurs cas que je n’ai pas réussi à faire fonctionner et je ne sais pas pourquoi.
Informations supplémentaires sur le package:
Exemples de fonds de carte: