05 - Carte 3D et interactives en langage R

L'essentiel de cette page

Dès qu'on a une carte raster (cf. niveau 3 - multicouches), c'est un jeu de passer le tout en 3D avec rasterVis.

1- Code copier-coller pour générer rapidement le fond de carte à données d'altitude (dérouler ce titre)

library(raster)  # vérifier aussi que rgdal est installé
# Charger les contours administratifs de la Grèce
adm_gr <- getData('GADM', country='GRC', level=1)
# Charger les données altimétriques de la grèce
srtm <- getData('SRTM', lon=23, lat=36) # srtm : meilleure résolution que alt
# Réduire les contours administratifs à une région
adm <- adm_gr[match(toupper(adm_gr$NAME_1[7]),toupper(adm_gr$NAME_1)),] # Péloponnèse
# Réduire les données altimétriques à une zone
vatikasrtm <- crop(srtm,extent(c(xlim=c(23,23.3),ylim=c(36.422,36.54))))
# Lisser les données altimétriques
vatikasrtm[is.na(vatikasrtm[])] <- minValue(vatikasrtm)
vatikasrtm_mask_brut <- disaggregate(vatikasrtm, fact=17)
FenetreLissage=matrix(1,17,17) # Création de la fenêtre de lissage
vatikasrtm_mask<- focal(vatikasrtm_mask_brut,fun=mean,w=FenetreLissage,pad=T,padValue=0)  # Lissage avec filtre mean ou median (fun)médian
#vatikasrtm_mask <- mask(vatikasrtm_mask ,mask= adm, inverse=F); # optionnel, supprimer les pixels hors des contours adm
# Définir une palette de couleurs
liste_colors <- c("#BCF5A9","#36a013","#E58544","#C6753F","#B6652F")
colfunc<-colorRampPalette(liste_colors,interpolate="spline")
colors <- colfunc(1000)
colors[1] <- "#B1FAF3"
# Visualiser
plot(vatikasrtm_mask,col=colors)

Carte que l'on va afficher en 3D


2- Afficher une coupe, un transect de la carte

En reprenant le code du fond de carte de la partie 1 ci-dessus

install.packages("rasterVis")
library(rasterVis)
levelplot(vatikasrtm_mask, col.regions=colors)



3- Afficher la carte en 3D

# Afficher une carte en 3D
plot3D(vatikasrtm_mask,col=colors,zfac=0.5)



##Changer la palette de couleurs
library(RColorBrewer)
myPal <- colorRampPalette(brewer.pal(11, 'PuOr'))
plot3D(vatikasrtm_mask, col=myPal)