web-dev-qa-db-fra.com

Obtenir une carte avec les coordonnées de limites spécifiées

Je souhaite obtenir une carte avec RgoogleMaps de R, avec une limite de coordonnées spécifique.

Ce que je peux appeler, c'est GetMap, et spécifier un centre, je dois ajouter un niveau de zoom. Tout fonctionne bien, sauf que je ne reçois pas de carte illustrée avec les coordonnées que je choisis.

Voici un exemple:

lat <- c(44.49,44.5)                
lon <- c(11.33,11.36)               
center = c(mean(lat), mean(lon))    
zoom <- 14                          
mmap <- GetMap(center = center, zoom=zoom, maptype= "satellite", destfile = "m.png") 

Le problème est que seul le centre est passé en tant que paramètre et que, par conséquent, toute l'image que je vois dépend du niveau de zoom. Donc, je ne peux pas vraiment comprendre quelles sont les limites de l'image que je reçois. Ce que je veux faire, c'est que l'image soit délimitée exactement avec les coordonnées que je définis. Est-ce possible (également avec d'autres packages de cartes)?

17
lbedogni

Voici un moyen. Tout d'abord, vous obtenez une carte avec un certain zoom. Ensuite, vous ajoutez les limites lon et lat lorsque vous dessinez une figure, ce que vous pouvez faire avec scale_x_continuous et scale_y_continuous

library(ggmap)
library(ggplot2)

### Set a range
lat <- c(44.49, 44.5)                
lon <- c(11.33, 11.36)   

### Get a map
map <- get_map(location = c(lon = mean(lon), lat = mean(lat)), zoom = 14,
               maptype = "satellite", source = "google")

### When you draw a figure, you limit lon and lat.      
foo <- ggmap(map)+
       scale_x_continuous(limits = c(11.33, 11.36), expand = c(0, 0)) +
       scale_y_continuous(limits = c(44.49, 44.5), expand = c(0, 0))

foo

enter image description here

26
jazzurro

Une autre option consiste à utiliser OpenStreetMap comme source pour votre carte. Avec la fonction get_map du package ggmap, vous pouvez spécifier les limites de votre carte lorsque vous utilisez OpenStreetMap en tant que source. Avec:

mmap <- get_map(location = c(11.33,44.49,11.36,44.50), source = "osm")
ggmap(mmap)

vous recevez:

 enter image description here

Cependant, cette méthode ne fonctionne pas avec GoogleMaps. Spécifier les limites avec GoogleMaps en tant que source vous donnera l'avertissement suivant:

Attention: cadre de sélection attribué à Google - étendue spatiale uniquement approximatif. conversion du cadre de sélection en spécification centre/zoom . (expérimental)

L’utilisation d’OpenStreetMap présente l’inconvénient de ne pas avoir accès aux images satellites.

7
Jaap

Un autre moyen de créer une carte interactive avec Google Map consiste à utiliser mon package googleway.

library(googleway)

lat <- c(44.49,44.5)                
lon <- c(11.33,11.36)  
zoom <- 14   

mapKey <- 'your_api_key'

google_map(location = c(mean(lat), mean(lon)), zoom = zoom, key = mapKey)

 enter image description here

Qui, étant une carte de Google, vient avec l'imaginaire satellite en tant que norme

 enter image description here

3
SymbolixAU

J'aurais aimé avoir déjà vu cette question plus tôt ... Le package RgoogleMaps offre deux moyens de récupérer une carte: GetMap (centre, zoom) et GetMap.bbox (lonR, latR) qui prend simplement le cadre de sélection comme paramètres. Le niveau de zoom est automatiquement calculé. Je pense que cette dernière fonction pourrait être ce que vous recherchez ... Markus

1
Markus Loecher