2.1- Ouvrir un fond de carte vectoriel et colorer sélectivement des aires (régions, communes...)

Niveau 2 - Des cartes plus personnelles à partir d'un fond de carte vectoriel

1- Ouvrir un fond de carte au format vectoriel

1- Charger la librairie maptools

install.packages("maptools") ; library("maptools")

2- Ouvrir le fond de carte - dans cet exemple on ouvrira le fond de carte - rappel : où trouver les fonds de carte ?

library(rgdal)

dordogne<- readOGR(dsn = ".", layer = "l_commune_2017_s_24",p4s=CRS("+proj=longlat")) # DO NOT ADD ".shp" to your shapefile name

# ou alors ; library(sf) ; read_st()

Décrire le fond de carte : fonction str()

str(dordogne)

3- Obliger R à lire les caractères spéciaux avec la bonne police : la commune Vélines doit redevenir Vélines

sort(dordogne$nom_com) # On voit ici que les noms des communes sont mal affichés lorsqu'un caractère est accentué

# exemple :

Encoding(levels(dordogne$nom_com)) <- "latin1"

Encoding(levels(dordogne$nom_com)) <- "UTF-8" ;

sort(dordogne$nom_com)

2- Décrire un fond de carte afin d'en extraire le noms des lieux, de pouvoir envisager une coloration sélective

Si je reprends l'exemple précédédent où j'ai ouvert un fond de carte que j'ai nommé dordogne, il apparait que la commande head(dordogne) donne des résultats inexploitables.

Je dois faire appel à la commande names()

names(dordogne) # Affiche les noms des différentes rubriques

dordogne$code_insee # Permet d'afficher les codes insee des différentes communes de Dordogne

dordogne$nom_com[dordogne$code_insee==24256] # affiche le nom de la commune ayant le code INSEE 24256

coordinates(dordogne@polygons[[1]]@Polygons[[1]]) # Permet de récupérer les coordonnées du tracé de la première commune de Dordogne

3- Tracer la carte

plot(dordogne)

# Ajouter une coloration rouge pour la 516ème commune

plot (dordogne[516,],col="red",add=T) # add = T pour superposer à la carte précédente

# Ajouter une coloration verte pour la commune ayant le code_insee 24035

plot (dordogne[which(dordogne$code_insee==24035),],col="green",add=T)

plot(dordogne,col="#CCFFCC")

# Colorer la commune 01 de la liste en bleu

plot (dordogne[1,],col="blue",add=T)

# Récupérer les coordonnées moyennes de la commune colorée en bleu

x <- mean(coordinates(dordogne@polygons[[1]]@Polygons[[1]])[,1])

y <- mean(coordinates(dordogne@polygons[[1]]@Polygons[[1]])[,2])

x ; y

# Tracer le cercle autour du centre de gravité de la commune

points(x,y,col="red",cex=5,lwd=3)

4- Prendre en compte les caractéres spéciaux (noms des villes accentués, polices étrangères) pour les afficher correctement

Je télécharge une base de données qui contient plein de noms de villes avec des caractères spéciaux (é,ê en français - ou par exemple ici, des noms grecs). Cela va me poser tout de suite de nombreux problèmes (fichier lourd, caractères spéciaux qui s'affichent mal, données à trier...).

library("raster")

adm_gr <- getData('GADM', country='GRC', level=1)

J'affiche la carte :

plot(adm_gr,xlim=c(22.4,22.5),ylim=c(36.38,36.55),lwd=2,bg="#B6F3EC",col="#F2F3B6")

Je charge les noms de lieu :

install.packages(c("maps","maptools","rgdal"))

library("maptools");library("maps");library("rgdal")

# le fichier à télécharger des noms de ville se retrouve ici.

places <- readOGR(dsn = ".", layer = "places",p4s=CRS("+proj=longlat"))

# Décrire le fichier

names(places) # on voit que les noms des villes apparaissent dans la sous-rubrique name

On peut donc les ajouter avec text()

text(places,places$name)

Et là, les problèmes commencent ! C'est long à afficher et c'est moche !

Problème 1, les noms sont abherrants car caractères imbuvables.

Encoding(levels(places$name)) <- "latin1"

Encoding(levels(places$name)) <- "UTF-8"

plot(adm_gr,xlim=c(22.4,22.5),ylim=c(36.38,36.55),lwd=2,bg="#B6F3EC",col="#F2F3B6")

text(places,places$name)

Maintenant, ça marche mais c'est toujours lent à afficher (car il y a tous les noms du pays : il faut extraire ce qui nous intéresse)

Problème 2, alléger le fichier nom en n'affichant que ceux visibles sur la carte

Je dois extraire les coordonnées du fichier pour extraire les villes qui m'intérèssent, problème ici ce sont des id osm, autrement dit des identifiants Open Street Map. Je dois donc convertir ces id osm avec la fonction coordinates().

lon <- coordinates(places)[,1]

lat <- coordinates(places)[,2]

id <- which(lon>=22.4&lon<22.6&lat>=36.38&lat<=36.55)

noms_sur_carte <- places[id,]

plot(adm_gr,xlim=c(22.4,22.5),ylim=c(36.38,36.55),lwd=2,bg="#B6F3EC",col="#F2F3B6")

text(noms_sur_carte,noms_sur_carte$name)

Problème 3, n'afficher que les principaux patelins

names(noms_sur_cartes)

noms_sur_carte$type

plot(adm_gr,xlim=c(22.4,22.5),ylim=c(36.38,36.55),lwd=2,bg="#B6F3EC",col="#F2F3B6")

text(noms_sur_carte[which(noms_sur_carte$type=="village"),],noms_sur_carte$name[noms_sur_carte$type=="village"],cex=1.1,las=1)

# Et on peut même ajouter les rivières

riviere <- readOGR(dsn = ".", layer = "waterways", p4s=CRS("+proj=longlat")) # cliquer pour télécharger

plot(rivieres,add=T,col="#177CED") # et on ajoute le tracé des rivières

5- Récupérer les contours d'une zone spatiale pour supprimer les frontières internes

library("maptools");library(rgdal);library(maps)

library("rgeos") #pour gBuffer

Télécharger le fond de carte du monde (résolution à 10 m) sur : naturalearthdata.

# Ouverture de fond de carte

monde<- readOGR(dsn = ".", layer = "ne_10m_admin_0_countries_lakes", p4s=CRS("+proj=longlat"))

# Charger les pays de son choix : Turquie et Grèce

europe <- monde[which(monde$ISO_A3=="GRC"|monde$ISO_A3=="TUR"|monde$ISO_A3=="ALB"|monde$ISO_A3=="MKD"|monde$ISO_A3=="BGR"),]

# Affichage optionnel de ces pays

plot(europe,xlim=c(23,28),ylim=c(35,41),lwd=3,col=c("#FAFAFA"))

# Regroupement de ces pays

europe <- gUnaryUnion(spgeom = europe)

# Récupération des contours avec un lissage HD (valeur width basse)

europeBuffer <- gBuffer(spgeom = europe, width= 0.001, byid = FALSE)

# Affichage

plot(europeBuffer,xlim=c(23,28),ylim=c(35,41),lwd=4,col=c("#FFFF88"),bg="#88DDFF")

Carte de l'Europe illustrant le nombre de correspondants sur un sujet X à différentes époques

Cette carte R project affiche des annotations automatiques + les données essentielles (TOL Titre, Orientation Légende Echelle) - rosace - Carte de l'Europe - Carte du monde - points proportionnelle à la taille - maps - espace - longitude - latitude


Cliquer sur l'image pour voir comment la réaliser