Lorsqu'on réalise des cartes, il est intéressant de récupérer les riches données satellitaires mis à notre porté par des géants comme Google maps. Cela permet d'illustrer avec une plus grande précision ses propres données géolocalisées.
La première règle lorsqu'on utilise des librairies de chargements de données de Google est de ne pas en abuser sinon votre IP sera bloqué par Google !
Si vous avez ce message d'erreur : HTTP status was '403 Forbidden'
, c'est qu'il est trop tard. Dans ce cas, il faut se référer à la rubrique en bas de page.
Que faire quand Google m'a bloqué ?
install.packages("ggmap")
library(ggmap) #https://cran.r-project.org/web/packages/ggmap/ggmap.pdf
# Chargement de la librairie RgoogleMaps
install.packages(c("png","ReadImages","RgoogleMaps"))
library(RgoogleMaps)
setwd("C:/Users/MesDocuments");getwd()
# Bordeaux via le centre
library(RgoogleMaps)
# Chargement (zoom donne le niveau d'altitude d'où "prise" l'image)
bdx_center <- GetMap(center=c(44.850050, -0.574829), zoom=12, destfile="bdx_center_mobile.png", size=c(640,640), maptype="relief") # existe en terrain
# Afficher l'image sauvegardée dans le répertoire courant
PlotOnStaticMap(bdx_center)
library(RgoogleMaps) # A faire avant : install.packages(c("png","ReadImages","RgoogleMaps"))
mymarkers <- cbind.data.frame(lat =c(36.4269776,36.495480),
lon=c(23.059337,23.201548));
mymarkers
bb <- qbbox(lat = mymarkers[,"lat"], lon = mymarkers[,"lon"]);bb
MyMap <- GetMap.bbox(bb$lonR, bb$latR,
destfile = "DC.png",markers = mymarkers,
zoom=12,
maptype="satellite")
PlotOnStaticMap(MyMap)
vatikacenter <- GetMap(center=c(36.457028, 23.178611),
zoom=14,
destfile="vatika_center_18.png",
size=c(640,640),
maptype="terrain"
) # API_console_key=apikey si code API nécessaire
i=0.001
PlotOnStaticMap(vatikacenter,
lat=c((36.457028+i),(36.457028+i),(36.457028-i),(36.457028-i)),
lon=c((23.178611+i),(23.178611-i),(23.178611+i),(23.178611-i)),
cex=4,pch=20,col="orange")
J'utilise R pour charger des données de google maps mais une erreur s'affiche ! "Error 403 forbidden".
Pas de panique, vous avez dû trop charger de données (et pourtant vous aviez droit à 25000/jours !) et Google vous a interdit... pour longtemps.
N'espérer pas réutiliser R couplé à Google maps avant longtemps.
Toutefois, il y a moyen d'y avoir accès, pour un temps : c'est de se faire un abonnement Google Cloud. En obtennant un code API et en le signalant avec le paramètre API_console_key=apikey (RGoogleMaps) ou key (ggmap), ça peut fonctionner.
# Chargement des données
perigueux = get_googlemap(center = c(lon = 0.714539, lat = 45.186369),
zoom = 13,size = c(640,640), scale = 2, format = c("png8"),
maptype = "satellite", filename = "ggmapTemp" )
# Affichage de l'image satellite
x11();ggmap(perigueux ,extent="device") # extent normal : donne des axes.
# Sauvegarde au format png
dev.new();png("perigueux_ggmap.png");ggmap(perigueux,extent="device");
dev.off()
Il existe plusieurs librairies dédiées aux données d'OpenStreetMap :
install.packages("OpenStreetMap"); # Il faut installer Java
library("OpenStreetMap")
require(maps) ; require(ggplot2)
# Point haut-gauche 45.197734, 0.717331
# Point Bas-droite 45.195488, 0.720223
mp <- openmap(c(45.197734, 0.717331),c(45.195488, 0.720223),17,'osm')
plot(mp)
p <- autoplot(mp,expand=T) + theme_bw()
print(p)
Et si on veut ajouter des points : il va falloir se mettre à ggplot2 : un excellent outil graphique pour la visualisation de données (dataviz)
Deux options se présentent à moi pour ajouter un point.
mon_pt <- projectMercator(45.196040, 0.718700)
plot(mp) ; points(mon_pt[1],mon_pt[2])
p <- autoplot(mp,expand=T) + geom_point(aes(mon_pt[1],mon_pt[2]),color="red") +theme_bw()
print(p)
De la même façon je pouvait ajouter un grand nombre de points en faisant appel à un tableau, il suffit de remplacer la syntaxe de ggplot2
# Je récupère les coordonnées de ma carte
mp <- openmap(c(45.197734, 0.717331),c(45.195488, 0.720223),17,'osm')
# Je la convertis
map_longlat <- openproj(mp)
# Je trace
plot(map_longlat)
# J'ajoute mon point
points(0.718700,45.196040,cex=3,col="red")
A voir, comment charger les contours administratifs de la France et les superposer à une image satellite avec OpenStreetMap et maps
map <- openmap(c(70,-179),
c(-70,179),zoom=1,type='bing')
plot(map)
map_longlat <- openproj(map)
plot(map_longlat)
map("world",col="red",add=TRUE)
map("france",col="orange",add=TRUE,lwd=2)