0

我可以使用 ggmap 绘制多个地图,这也可以使用Kale & Wickham (2013) R Journal paper中描述的 faceting 。但我想绘制一系列围绕城市特定缩放区域平移的地图。如果我查看通过geocode()函数获得的城市坐标并粗略地找出我需要从平移视图每一侧的经度/纬度中减去或添加的内容,这是可以实现的。这样的解决方案远非理想。让我用一个例子来说明(注意:Cookbook For Rmultiplot中使用的函数)。

library(ggmap)
library(RgoogleMaps)

#getting Bristol lat/long
BRS <- geocode("Bristol, UK")

#get the first (central) map from the coordinates
BristolMapCenter <- ggmap(get_map(c(lon=BRS$lon, lat=BRS$lat), zoom = 15))

#get the second map panned to the right by adding approx. 0.015 to longitude
BristolMapRight <- ggmap(get_map(c(lon=BRS$lon+0.015, lat=BRS$lat),zoom = 15))

#multiplot function
multiplot(BristolMapCenter, BristolMapRight, cols=2)

在此处输入图像描述

如您所见,这远非理想,因为总体而言(我不想重叠,我想要“排队延续”),如果不是说笨拙的话,尤其是如果我想对周围区域进行更大的平移(比如说9-12张地图),为多个城市做这件事,在上面绘制一些数据,我生命中还有足够的时间在太阳上喝一品脱。所以我想知道是否有任何快速、流畅和自动的方法来获取基于特定中心坐标的平移地图?

4

1 回答 1

2

从您的代码开始:

library(ggmap)
library(RgoogleMaps)

#getting Bristol lat/long
BRS <- geocode("Bristol, UK")

#get the first (central) map from the coordinates
BristolMapCenter <- ggmap(get_map(c(lon=BRS$lon, lat=BRS$lat), zoom = 15))

我们可以在这个缩放级别提取地图所覆盖的绝对范围:

z15width = sapply(BristolMapCenter$data, function(x) abs(diff(range(x))))

然后将其倍数添加到您的 BRS 坐标中。

BristolRight = ggmap(get_map(c(lon = BRS$lon + z15width["lon"],
                               lat = BRS$lat), zoom = 15))

这些应该很好地排列。

multiplot(BristolMapCenter, BristolRight, cols = 2)

在此处输入图像描述

您可以在任何正交方向上移动 的整数倍z15width,并且事情应该继续排列。当然,在不同的缩放下,你会得到不同的宽度。您可以编写一个脚本来计算许多不同缩放值的宽度并将其存储在某处并稍后引用它。

于 2015-06-24T16:31:51.580 回答