Get Map with specified boundary coordinates
Asked Answered
L

4

18

I want to get a map with RgoogleMaps from R, with a specific coordinates boundary.

What I can call is GetMap, and specify a center, I must add a zoom level. Everything works fine, except that I am not getting an image map bounded with the coordinates I choose.

Here's an example:

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") 

The problem is that only the center is passed as a parameter, and thus the whole image I see is dependant on the zoom level. So, I cannot really understand what are the boundaries of the image I get. What I want to do is to get an image bounded exactly with the coordinates I am defining. Is this possible (also with other map packages)?

Leoleod answered 3/9, 2014 at 5:34 Comment(0)
Z
28

Here is one way. First, you get a map with a certain zoom. Then, you add the lon and lat limit when you draw a figure, which you can do with scale_x_continuous and 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

Zr answered 3/9, 2014 at 7:56 Comment(1)
This procedure fetch the image at a low zoom level (14) and then crops the image which results in a low resolution imagery. A better approach would be to change the extent object to google centroid and zoom level directly.Expectoration
F
8

Another option is using OpenStreetMap as a source for your map. With the get_map function from the ggmap package, you can specify the boundaries of your map when you use OpenStreetMap as a source. With:

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

you get:

enter image description here

However, this method does not work with GoogleMaps. Specifying the boundaries with GoogleMaps as a source will give you the following warning:

Warning: bounding box given to google - spatial extent only approximate. converting bounding box to center/zoom specification. (experimental)

A drawback of using OpenStreetMap is that you won't have access to satelite images.

Foliate answered 7/9, 2015 at 6:35 Comment(0)
B
3

Another way for an actual interactive Google Map is with my googleway package

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

Which, being a Google Map, comes with satellite imagary as standard

enter image description here

Balmy answered 30/6, 2017 at 11:12 Comment(0)
V
1

I wish I had seen this question earlier. The RgoogleMaps package offers two ways of retrieving a map: GetMap(center, zoom) and GetMap.bbox(lonR,latR) which simply takes the bounding box as parameters. The zoom level is automatically computed. I think that the latter function could be what you are looking for. Markus

Valida answered 12/8, 2017 at 13:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.