web-dev-qa-db-fra.com

Coordonnées de Plot sur la carte

J'essaie de tracer mes coordonnées avec R. J'ai déjà essayé de suivre différents messages ( R: coordonnées groupées de la parcelle sur la carte du monde ; Tracer les coordonnées de plusieurs points sur la carte Google dans R ) ne pas avoir beaucoup de succès avec mes données. 

J'essaie de réaliser une carte du monde à plat avec mes coordonnées GPS sous forme de points colorés (chaque zone a une couleur spécifique): 

area         lat    long
Agullhas    -38,31  40,96
Polar       -57,59  76,51
Tasmanian   -39,47  108,93

library(RgoogleMaps)
lat <- c(-38.31, -35.50) #define our map's ylim
lon <- c(40.96,37.50) #define our map's xlim
center = c(mean(lat), mean(lon))  #tell what point to center on
zoom <- 2 #zoom: 1 = furthest out (entire globe), larger numbers = closer in
terrmap <- GetMap(center=center, zoom=zoom, maptype= "satallite", destfile = "satallite.png")

problème que maintenant je ne sais pas comment ajouter mes points et je vais aimer une couleur pour chaque région. 

Quelqu'un pourrait-il m'aider à aller de l'avant avec cela? 

l'autre option que j'ai essayée est: 

library(maps)
library(mapdata)
library(maptools)
map(database= "world", ylim=c(-38.31, -35.5), xlim=c(40.96, 37.5), col="grey80", fill=TRUE, projection="gilbert", orientation= c(90,0,225))
lon <- c(-38.31, -35.5)  #fake longitude vector
lat <- c(40.96, 37.5)  #fake latitude vector
coord <- mapproject(lon, lat, proj="gilbert", orientation=c(90, 0, 225))  #convert points to projected lat/long
points(coord, pch=20, cex=1.2, col="red")  #plot converted points

mais les coordonnées se terminent dans une mauvaise position et je ne sais pas pourquoi

J'espère que quelqu'un peut aider 

31
flacchy

Au lieu de RgoogleMaps, vous pouvez également utiliser la combinaison ggplot2 avec ggmap.

Avec ce code:

# loading the required packages
library(ggplot2)
library(ggmap)

# creating a sample data.frame with your lat/lon points
lon <- c(-38.31,-35.5)
lat <- c(40.96, 37.5)
df <- as.data.frame(cbind(lon,lat))

# getting the map
mapgilbert <- get_map(location = c(lon = mean(df$lon), lat = mean(df$lat)), zoom = 4,
                      maptype = "satellite", scale = 2)

# plotting the map with some points on it
ggmap(mapgilbert) +
  geom_point(data = df, aes(x = lon, y = lat, fill = "red", alpha = 0.8), size = 5, shape = 21) +
  guides(fill=FALSE, alpha=FALSE, size=FALSE)

vous obtenez ce résultat: enter image description here

50
Jaap

Une autre alternative est le paquetage plotGoogleMaps qui permet de tracer dans un navigateur, permettant de faire un zoom avant et arrière, etc. Vous pouvez ensuite faire une capture d'écran de votre photo pour l'enregistrer (bien que rappelez-vous que les cartes Google sont légalement censées être utilisées pour Internet ). 

 library("plotGoogleMaps")
 lat <- c(-38.31, -35.50) #define our map's ylim
 lon <- c(40.96,37.50) #define our map's xlim

 # make your coordinates a data frame 
 coords <- as.data.frame(cbind(lon=lon,lat=lat))

 # make it a spatial object by defining its coordinates in a reference system
 coordinates(coords) <- ~lat+lon 

 # you also need a reference system, the following should be a fine default
 proj4string(coords) <- CRS("+init=epsg:4326")
 # Note: it is a short for: 
 CRS("+init=epsg:4326")
 > CRS arguments:
 >  +init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 

 # then just plot
 a <- plotGoogleMaps(coords)
 # here `a <-` avoids that you get flooded by the html version of what you plot 

Et vous obtenez:  enter image description here

3
cmbarbu

Voici une solution utilisant uniquement Rgooglemaps, à la demande de l'utilisateur.

# get map (from askers OP, except changed map type = "Satallite" to type = "Satellite")
library(RgoogleMaps)
lat <- c(-38.31, -35.50) #define our map's ylim
lon <- c(40.96,37.50) #define our map's xlim
center = c(mean(lat), mean(lon))  #tell what point to center on
zoom <- 2 #zoom: 1 = furthest out (entire globe), larger numbers = closer in
terrmap <- GetMap(center=center, zoom=zoom, type= "satellite", destfile = "satellite.png")

# plot points and save image
lat <- c(-38.31, -57.59, -39.47)
lon <- c(40.96, 76.51, 108.93)
png('map.png')
PlotOnStaticMap(terrmap, lat = lat, lon = lon, pch = 20, col = c('red', 'blue', 'green'))
dev.off()

 enter image description here

0
sebdalgarno

Une autre option consiste à utiliser le package leaflet (comme suggéré ici ). Contrairement aux options de Google, il ne nécessite pas de clé API.

library(sp)
library(leaflet)
df <- data.frame(longitude = runif(10, -97.365268, -97.356546), 
                 latitude = runif(10, 32.706071, 32.712210))
coordinates(df) <- ~longitude+latitude
leaflet(df) %>% addMarkers() %>% addTiles()
0
bonna