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 :

  1. Aller dans la rubrique data

  2. Cliquer sur World ou Country et sélectionner le pays de son choix

  3. 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.


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

Suivre ce lien pour voir un exemple sur le site.

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)

Croiser des identifiants (ceux d'un tableau et ceux d'un fond de carte)