rleafmap

Cartographie interactive avec R et Leaflet


François Keck

INRA, UMR CARRTEL
75 avenue de Corzent
74200 Thonon-les-Bains
francois.keck@thonon.inra.fr
@FrancoisKeck


[Pour éviter des problèmes d'affichage il est recommandé d'utiliser votre navigateur en mode plein écran (F11)]

Qu'est-ce qu'une carte interactive ?

Valeurs ajoutées de la cartographie interactive

Cartes Multi-échelles

e.g. Google Maps
20 niveaux d'échelle de 1:590.000.000 à 1:1000.

Cartes Glissante

Pour travailler à petite échelle sur de grandes surfaces

250.000 cartes IGN 1:25.000 pour représenter l'ensemble des terres émergées

Affichage et manipulation de données

  • Couches de données multiples et indépendantes
  • Plusieurs cartes en une seule
  • L'utilisateur devient éditeur

Multimedia et Hypermedia

  • La carte peut être le support d'autres média (texte, photo, video...)
  • La carte est partie intégrante du réseau hypertexte

Cartes interactives dans R

Ça existe déjà !

Différents packages : googleVis, plotGoogleMaps, rMaps, leafletR, webmaps...


Basés sur différentes technologies de rendus :
Format SVG, Google Chart, Google Maps API, Leaflet, OpenLayers...

rleafmap = R + Leaflet

rleafmap est un package R

Il est conçu pour exporter des données héritant de la classe Spatial* (package sp, Bivand et al. 2008) vers une carte interactive Leaflet


rleafmap est diponible sur www.francoiskeck.fr/rleafmap/


install.packages("~/rleafmap_0.1.tar.gz", repos = NULL, type = "source")

library(sp)
library(rleafmap)
               

Leaflet

rleafmap fonctionne avec Leaflet, un projet de bibliothèque JavaScript opensource initié par Vladimir Agafonkin.


Avantages

  • Leaflet est légère (33kb)
  • Leaflet est simple
  • Leaflet est mobile-friendly

Données prises en charge

Fonctionnement général

La fonction writeMap


writeMap(...,
			dir = getwd(),
			prefix = "",
			width = 700, height = 400,
			setView = c(0,0),
			setZoom = 6,
			interface = NULL,
			lightjson = FALSE,
			directView = c("viewer", "browser", "disabled"),
			leaflet.loc = "online")
               

Un premier exemple

Les stations Velo'v de la ville de Lyon


library(sp)
velov <- read.table("velov.txt", h = T)
coordinates(velov) <- ~lon+lat

library(rleafmap)
stamen.toner <- basemap("stamen.toner")
velov.map <- spLayer(velov, stroke = F, popup = velov$stations.name)
writeMap(stamen.toner, velov.map, setView = c(45.76, 4.85), setZoom = 12)
               

Un premier exemple

Les stations Velo'v de la ville de Lyon

La fonction basemap

La fonction basemap() permet de créer simplement une nouvelle couche de tuiles (distribuées par un serveur distant)


Une liste de serveurs préconfigurés est disponible

  • mapquest.map
  • mapquest.sat
  • stamen.toner (+ variations)
  • stamen.watercolor


N'importe quelle URL de serveur de tuiles peut être utilisée


						basemap("stamen.toner")					
					

						basemap("stamen.watercolor")					
					

#User defined server: Mapbox Tiles example
basemap("https://a.tiles.mapbox.com/v3/examples.map-i875mjb7/{z}/{x}/{y}.png")
					

#User defined server: Eleanor Lutz "Space Station"
basemap("https://a.tiles.mapbox.com/v3/eleanor.ipncow29/{z}/{x}/{y}.png")
					

La fonction spLayer()

La fonction générique spLayer() permet de créer simplement une nouvelle couche vecteur ou raster


Un ensemble d'arguments permet la personnalisation de la symbologie

  • size
  • png, png.width, png.height
  • stroke, stroke.col, stroke.lwd, stroke.lty, stroke.alpha
  • fill, fill.col, fill.alpha
  • cells.col, cells.alpha


L'argument popup permet l'ajout d'info-bulles

spLayer - Polygones

Répartition des campings en France


data(campsites)

gcol <- rev(heat.colors(5))
gcut <- cut(campsites$N.CAMPSITES, breaks = c(-1, 20, 40, 60, 80, 1000))

pop <- paste(campsites$DEP.NAME, " (", campsites$DEP.CODE, ") 
", campsites$N.1, "★
", campsites$N.2, "★★
", campsites$N.3, "★★★
", campsites$N.4, "★★★★
", campsites$N.5, "★★★★★", sep = "") cs <- spLayer(campsites, fill.col = gcol[as.numeric(gcut)], popup = pop) writeMap(mq.map, cs, setView = c(46.5, 3), setZoom = 5)

spLayer - Polygones

Répartition des campings en France

spLayer - raster heatmap

Densité de stations Vélo'v


library(spatstat)
win <- owin(xrange = bbox(velov)[1,] + c(-0.01,0.01),
            yrange = bbox(velov)[2,] + c(-0.01,0.01))
velov.ppp <- ppp(coordinates(velov)[,1], coordinates(velov)[,2], window = win)
velov.ppp.den <- density(velov.ppp, sigma = 0.005)
velov.den <- as.SpatialGridDataFrame.im(velov.ppp.den)
velov.den$v[velov.den$v < 10^3] <- NA

velov.d <-spLayer(velov.den, layer = "v",
                  cells.alpha = seq(0.1, 0.8, length.out = 12))
writeMap(mapbox, velov.d, setView=c(45.76, 4.85), setZoom = 12)
					

spLayer - raster heatmap

Densité de stations Vélo'v

La fonction ui()

La fonction ui() permet de personnaliser l'interface utilisateur



ui(zoom = c("topleft", "topright", "bottomleft", "bottomright", "none"),
   layers = c("none", "topright", "topleft", "bottomleft", "bottomright"),
   attrib = c("bottomright", "topleft", "topright", "bottomleft", "none"),
   attrib.text = "")
					

L'argument layers permet l'ajout d'un sélecteur de couches

Une carte multicouche

Emplacement stations Vélo'v + Densité de stations Vélo'v + Voies cyclables


vcycle <- readShapeLines("amenagement_cyclable")
vcycle.map <- spLayer(vcycle, stroke.col = "red", stroke.lwd = 1.3,
                      stroke.lty = c(5,3))

velov.ui <- ui(layers = "topright")

writeMap(stamen.toner, mapbox.terrain, velov.d, velov.map, vcycle.map,
         interface = velov.ui, setView = c(45.76, 4.85), setZoom = 13)
					

Une carte multicouche

Emplacement stations Vélo'v + Densité de stations Vélo'v + Voies cyclables

Intégration dans RStudio


					writeMap(..., directView = "viewer")
					

Intégration dans RStudio


					writeMap(..., directView = "viewer")
					

Merci de votre attention !