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 RgoogleMapsinstall.packages(c("png","ReadImages","RgoogleMaps"))library(RgoogleMaps)setwd("C:/Users/MesDocuments");getwd()# Bordeaux via le centrelibrary(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 courantPlotOnStaticMap(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));mymarkersbb <- qbbox(lat = mymarkers[,"lat"], lon = mymarkers[,"lon"]);bbMyMap <- 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écessairei=0.001PlotOnStaticMap(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éesperigueux = 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 satellitex11();ggmap(perigueux ,extent="device") # extent normal : donne des axes.# Sauvegarde au format pngdev.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 Javalibrary("OpenStreetMap")require(maps) ; require(ggplot2)# Point haut-gauche 45.197734, 0.717331# Point Bas-droite 45.195488, 0.720223mp <- 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 cartemp <- openmap(c(45.197734, 0.717331),c(45.195488, 0.720223),17,'osm')# Je la convertismap_longlat <- openproj(mp)# Je traceplot(map_longlat)# J'ajoute mon pointpoints(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)