我正在尝试将数据映射到更高分辨率的Google卫星图像。我可以使用较低分辨率的图像(例如缩放13并限制比例 - 如此处所示 - ggmap extended zoom or boundaries)但是,生成的图像不够清晰,不适合我的目的。所以基本上我希望能够将2 14变焦组合成1 ggmap:
library(ggmap)
library(gridExtra)
g1 <- get_googlemap(center = c(-83.986927, 33.955656), maptype="satellite", zoom=14)
g2 <- get_googlemap(center = c(-83.938079, 33.955656), maptype="satellite", zoom=14)
gmap1 <- ggmap(g1)
gmap2 <- ggmap(g2)
grid.arrange(gmap1, gmap2, ncol =2)
但有1个ggmap对象,它结合了gmap1和gmap2。
答案 0 :(得分:2)
您可以(也可能应该)转换为栅格对象。从那时起你应该真正使用它们,比如瓷砖,因为它们的像素看起来似乎不是基于相同的网格,因此拼接它们可能并不完美。你可以通过调整公差来解决这个问题。
get_googlemap
中的对象是十六进制颜色值的矩阵(“#FF000”等)和定义范围的一些属性。以下代码将该对象转换为三波段RGB栅格,具有正确的范围和CRS:
library(raster)
ggmap2raster <- function(g){
rgb = col2rgb(g)
bands = apply(rgb, 1, function(band){
raster(t(matrix(band,ncol=ncol(g), nrow=nrow(g))))
})
s = stack(bands)
bb = attr(g, "bb")
extent(s) = extent(bb$ll.lon,bb$ur.lon, bb$ll.lat, bb$ur.lat)
crs(s) <- "+init=epsg:4326"
s
}
要合并它们中的一堆,这段代码使用马赛克,但由于这些图层似乎排列不正确(可能因为数据实际上是在web mercator而不是WGS84中),所以需要提高容差和希望:
mergegg <- function(glist){
m = function(...){
mosaic(...,tolerance=0.5, fun=min)
}
do.call(m,
lapply(glist, function(g){
ggmap2raster(g)
})
)
}
> r = mergegg(list(g1, g2))
> plotRGB(r)
我怀疑如果我将角落坐标转换回Web Mercator,容差问题可能会消失。但这对周五早上来说太麻烦了。 ggmap
及其对坐标系的处理不是我现在想要的。您可以尝试将两个g1
和g2
矩阵对象绑定在一起,但您可能必须首先执行反向转换,并且说实话,因为使用Google卫星图像的限制(您拥有< / em>读取许可证条件?)我怀疑它是坏事。
要显示栅格对象,请使用tmap
包而不是ggmap
。