Cartographie avec R
Niveau 2 - Des cartes plus personnelles à partir d'un fond de carte vectoriel
L'essentiel de cette page...
Une des premières difficultés lorsqu'on réalise une carte est de trouver un fond de carte vierge à compléter.
Il faut :
Un fond de carte vectoriel
Que ce fond de carte soit associé à des données qui permettront d'y combiner de l'information (longitude, latitude, numéros INSEE des communes...)
Encore plus dur (non traité ici), que ce fond de carte intègre les contours d'une époque dans cadre de cartes historiques.
La fonction getData du package raster permet de télécharger automatiquement des fonds de carte de bonne qualité. Ces fonds de carte ne répondent pas toujours aux besoins. Il faut alors en trouver ! (cf. plus bas)
0.1- Trouver un fond de carte vectoriel
Il est possible de réaliser une de n'importe quel pays en téléchargeant un fond de carte sur le merveilleux site de gadm.
Il suffit de :
Aller dans la rubrique data
Cliquer sur World ou Country et sélectionner le pays de son choix
Cliquer sur Shapefile (si format .sp : le niveau (level) indique la découpe administrative : de l'échelle de la région à celle de la commune).
Problème des données de GADM : pas de codes INSEE associés, pas assez de métadonnées.
Sur GADM, on peut trouver des données pour réaliser une carte administrative de France. Pour cela différents fonds de carte sont disponibles en ligne. Tels ces fichiers qu'on retrouve sur le site gadm où il est possible de télécharger par pays :
FRA_adm0.RData : carte de France
FRA_adm1.RData : carte des régions
FRA_adm2.RData : carte des départements
autres (communes...) téléchargeables sur le site.
Les fonds de carte au format Rdata peuvent directement être chargés avec la fonction load().
load("FRA_adm2.RData") # Carte des départements peut être chargée directement avec la commande chargement dans fichier.
Pour la France, on dispose des données enrichies de l'IGN (GEOFLA) dont une partie est disponible gratuitement.
Lorsqu'on ne dispose pas de code INSEE et que l'on envisage de travailler uniquement avec les noms des régions, un problème se pose immédiatement : les noms de régions, des communes et des lieux ne sont pas nécessairement écrits de la même façon dans les métadonnées du fond de carte que dans le tableau où nous avons collectés les données statistiques.
Le plus simple est donc de récupérer directement les noms tels qu'ils sont écrits dans le fond de carte et de faire son tableau à partir de ces noms.
Une source spécialement utile pour la gestion de toutes les données spatiales :
Des liens externes pour trouver des fonds de carte au format vectoriel (.shp) :
0.2- Des exemples simples pour ouvrir des fonds de carte
1) Ouvrir un data.frame au format SP
library(sp)
data(meuse)
# Conversion en objet sp
coordinates(meuse) <- ~x+y
plot(meuse)
2) Ouvrir des données au format RData
load("Mon_RDATA.RData")
3) Ouvrir un fond de carte vectoriel (.shp) au format sp ou sf
Format sp avec la fonction readOGR
library(rgdal)
avignon_sp1_contours <- readOGR(file.choose())# .shp contours (lien ci-dessous)
avignon_sp2_monuments <- readOGR(file.choose())# .shp monuments
bbox(avignon_sp2_monuments) # Système de projection à conformer
avignon_sp2_monuments <-spTransform(avignon_sp2_monuments, CRS("+init=epsg:4326"))
plot(avignon_sp1_contours,xlim=c(4.8,4.9),ylim=c(43.88,44.0))
points(avignon_sp2_monuments[1],pch=16,cex=2,col="red")
Monuments d’Avignon : https://www.data.gouv.fr/fr/datasets/grandavignonpoi/
Contours IRIS : https://datanova.laposte.fr/explore/dataset/contours-iris-2015/export/?q=Avignon&location=12,43.93227,4.81373&basemap=jawg.streets
Format sf avec la fonction read_st()
4) Ouvrir un géopackage (GPKG) au format sf
library(sf) ; library(cartography)
avignon <- st_read(dsn ="https://trouver.datasud.fr/dataset/99a53f28-5251-456e-a937-253a275a5808/resource/c3b6cf68-742e-4179-8092-02f69f617150/download/84007-monumentshistoriques.gpkg", quiet = TRUE)
st_bbox(avignon)
plot(st_geometry(avignon))
5) Chargement d’un fond avec R grâce à la librairie raster
library(raster)
adm_fr <- getData('GADM', country='FRA', level=2)
plot(adm_fr)
6) Charger un fond de carte OSM - OpenStreetMap ou Google maps
library("OpenStreetMap")
mp <- openmap(c(43.96, 4.74),c(43.91, 4.84),13,'osm')
map_longlat <- openproj(mp)
plot(map_longlat)