Des très nombreuses données pour être chargée dans R avec une simple commande grâce à la librairie raster.
Etape 01 - Charger/Installer la librairie raster
install.packages("raster");library(raster)
Etape 02 - Charger les données de son choix
adm_fr <- getData('GADM', country='FRA', level=2)
# GADM indique que je veux des contours administratifs
# FRA est le code de la France*
# level est le niveau de résolution (1 : carte des régions - 2 : départements - 3 : communes)
Etape 03 - Je trace la carte
plot(adm_fr)
bbox(adm_fr) # Dimensions de la carte
library(raster)
adm_fr <- getData('GADM', country='FRA', level=0)
plot(adm_fr)
library(raster)
adm_fr <- getData('GADM', country='FRA', level=1)
plot(adm_fr)
library(raster)
adm_fr <- getData('GADM', country='FRA', level=2)
plot(adm_fr)
library(raster)
adm_fr <- getData('GADM', country='FRA', level=1)
plot(adm_fr,xlim=c(-0.5,0),ylim=c(42.7,45.7));box()
library(raster)
adm_fr <- getData('GADM', country='FRA', level=1)
cat("Liste des régions : \n")
adm_fr$NAME_1
plot(adm_fr[adm_fr$NAME_1=="Aquitaine",], lwd=2,border="#900C3F");box()
library(raster)
adm_fr <- getData('GADM', country='FRA', level=2)
cat("Liste des départements : \n")
adm_fr$NAME_2
plot(adm_fr[adm_fr$NAME_1=="Aquitaine",],lwd=2);box()
plot(adm_fr[adm_fr$NAME_2=="Dordogne",],add=T,col="#FCFC9C");box()
Remarque : si je veux plusieurs régions, je peux utiliser l'écriture %in%.
library(raster)
adm <- getData('GADM', country='FRA', level=1)
carte1 <- adm[adm$NAME_1 %in% c("Bretagne","Pays de la Loire"),]
plot(carte1)
Étape 1 - Tracer un fond bleu "marin"
Étape 2 - Tracer un contours littoral
Étape 3 - Remplir les terres
# ETAPE 0 - Chargement des données
library(raster)
adm_gr <- getData('GADM', country='GRC', level=1)
# Limiter la région chargée pour réduire le temps d'affichage
adm <- adm_gr[match(toupper(adm_gr$NAME_1[7]),toupper(adm_gr$NAME_1)),]# Péloponnèse
# Étape 1 - Tracer un fond bleu "marin"
plot.new()
par(mar=c(4,4,3,4),bg="transparent") # définition des marges
# on pré-trace la carte pour programmer ses limites d'affichage automatiquement
plot(adm,xlim=c(23.05,23.20),ylim=c(36.422,36.53),col="white",border="white",lwd=50) ; box()
# FOND DE MER : tracé simple d'un polygone
polygon(x = c(20, 30, 30, 20, 20), y = c(-10, -10, 50, 50, -10), col = "#bbe6fb", border = "transparent")
# Étape 2 - Tracer un contours littoral
plot(adm,col="white",border="#34bdf2",lwd=7,add=T)
Étape 3 - Remplir les terres
plot(adm, col="#FAFAB1", border="grey", lwd=1,add=T)
library(raster)
WorldMap <- getData('countries')
plot(WorldMap)
La carte ainsi est de très haute définition... donc longue à produire.
library(raster)
adm_fr <- getData('GADM', country='FRA', level=1)
plot(adm_fr,lwd=0.5, border="grey", col="#DFFAB1", bg="black");box()
points(0,44, col="red", pch=16, cex=2)
plot(adm_fr,lwd=0.5, border="yellow", col="#FFFAB1", bg="#00000000",box=F)
# On va générer 15 points aléatoire
nb_pt = 15
longitudes = rnorm(nb_pt,2,2)
latitudes = rnorm(nb_pt,46,2)
# et 15 couleurs
liste_colors <- c("blue","green","red")
colfunc<-colorRampPalette(liste_colors,interpolate="spline")
colors <- colfunc(nb_pt)
# On trace
points(longitudes,latitudes, col=colors, pch=c(8:18), cex=c((1:10)/2),lwd=2)
plot(adm_fr,lwd=0.5, border="green", col="#AAAAFF", bg="#00000000",box=F)
latitude = rnorm(10,44,3)
longitude = rnorm(10,1,3)
lat <- latitude[order(rayons, decreasing = TRUE)]
long <- longitude[order(rayons, decreasing = TRUE)]
ray <- rayons[order(rayons, decreasing = TRUE)]
# Tracer les disques rouges transparents
couleur =rgb(red=(243/255), green=(105/255), blue=0, alpha=0.8)
symbols(long,lat, circles = ray, add = TRUE, bg = couleur, inches = FALSE)
text(longitude,latitude,correspondants,cex=(rayons*1.5))
adm <- getData("GADM",country="FRA",level=1)
# Simuler des points sur la carte
bbox(adm)-> xy1
x <- rnorm(100,mean(xy1[1,]),2)
y <- rnorm(100,mean(xy1[2,]))
dim <- round(x+y,0) # Dim serait une valeur associée à chaque point (ici on additionne long et lat, ce qui n'a pas de sens...
# Découper les
cut(dim,breaks=10)->niveau
colfunc <- colorRampPalette(c("white","red","black"))
colors<- colfunc(10) %>% .[as.numeric(niveau)]
plot(adm)
points(x,y,col=colors,pch=16,cex=2)
legend(x="topleft",legend = levels(niveau), cex=0.8,fill=colfunc(10),bty="n")
Lorsqu'on réalise une carte, il faut toujours respecter la règle TOLE (Titre, Orientation, Légende, Échelle)
La fonction northarrow() récupérée sur le web (source inconnue) permet d'ajouter le nord géographique. Il faut la copier-coller.
# FONCTION POUR LA ROSACE DU NORD
northarrow <- function(loc, size, bearing = 0, cex = 1) {
# =========================================
cols <- rep(c("white", "black"), 8)
# Coordonnees des polygones de la rose des vents
radii <- rep(size/c(1, 4, 2, 4), 4) ; x <- radii[(0:15) + 1] * cos((0:15) * pi/8 + bearing) + loc[1]
y <- radii[(0:15) + 1] * sin((0:15) * pi/8 + bearing) + loc[2]
# Trace des polygones
for (i in 1:15) {
x1 <- c(x[i], x[i + 1], loc[1]) ; y1 <- c(y[i], y[i + 1], loc[2]) ; polygon(x1, y1, col = cols[i])
}
# Trace du dernier polygone
x1 <- c(x[16], x[1], loc[1]) ; y1 <- c(y[16], y[1], loc[2]) ; polygon(x1, y1, col = cols[16])
# Rajout des lettres
b <- c("E", "N", "O", "S")
for (i in 0:3) {
text((size + par("cxy")[1]) * cos(bearing + i * pi/2) + loc[1], (size + par("cxy")[2]) * sin(bearing + i * pi/2) + loc[2],
b[i + 1], cex = cex)
} }
library(raster)
adm_fr <- getData('GADM', country='FRA', level=1)
plot(adm_fr,lwd=0.5, border="grey", col="#AAAAAA", bg="white",box=F)
points(0,44, col="red", pch=16, cex=2)
northarrow(loc = c(-3, 45), size = 1, cex = 2)
Et pour l'afficher manuellement en cliquant sur la carte ?
# NORD GEOGRAPHIQUE
# loc = c(longitude, latitude)
# size = la taille de l'indication
cat("Cliquer là où vous voulez la rosace du nord");l = locator(n=1)
northarrow(loc = c(l$x,l$y), size = 1, cex =2)
La librairie raster contient une fonction pour afficher des barres d'échelle : scalebar().
plot(adm_fr,lwd=0.5, border="grey", col="#AAAAAA", bg="white",box=F)
points(0,44, col="red", pch=16, cex=2)
scalebar(d = 200, xy = c(5,42), type = "bar", below = "km",lwd = 5, divs = 2, col = "black", cex = 1, lonlat = T)
library(raster)
adm_fr <- getData('GADM', country='FRA', level=1)
plot(adm_fr,xlim=c(-0.5,0),ylim=c(42.7,45.7));box()
adm_fr$NAME_1
plot(adm_fr[adm_fr$NAME_1=="Nouvelle-Aquitaine",], lwd=2,border="#900C3F",col="orange",add=T);box()
plot(adm_fr[adm_fr$NAME_1=="Occitanie",], lwd=2,border="#900C3F",col="#900C3F",add=T);box()
legend(x="topleft", legend=c("Nouvelle-Aquitaine","Occitanie"), cex=0.8,fill=c("orange","#900C3F"),bty="n")
Si je charge un fond de carte, la commande names() va me permettre de le décrire et de récupérer les noms de lieux pour les sélectionner les colorer différemment.
library(raster)
adm_fr <- getData('GADM', country='FRA', level=2)
plot(adm_fr)
x <- locator(n=2)
# Là, je clique deux fois sur la carte pour faire un segment
lines(x,col="red",lwd=3)
# Là, je clique 5 fois sur la carte pour faire la ligne bleue
x <- locator(n=5)
lines(x,col="blue",lwd=4)
Carte des sous-départements de Dordogne avec un trajet entre deux villes (Périgueux & Sarlat)
Mots clefs : cartographique - carte R project - France - contours des départements - longitude - latitude - points - trajet - légende - texte - route - trajectoire - ville
Visualiser la superficie que représente un disque (très utile dans l'application des GWmodels).
library(GWmodel)
data(LondonBorough)
plot(londonborough)
# Définissons le centre du cercle : ici on va utiliser le milieu de la carte
xy <- bbox(londonborough) ; x <- mean(xy[1,]) ; y <- mean(xy[2,])
# Compiler le point où apparaît le cercle
library(sf)
pts <- st_as_sf(data.frame(x=x,y=y), coords = c("x", "y"),crs=st_crs(londonborough))
# Créer le cercle
st_buffer(pts,dist=4000)-> obj # st_buffer a un défaut : il n'accepte par les longitudes/latitudes
plot(londonborough)
plot(obj,col="red",add=T)
Remarque, on peut aussi utiliser l'argument border pour ne colorer que le bord du cercle.
On voit ici ce que représente sur Londres un cercle de diamètre de 4000 unités.