ggmap - 将两个卫星ggmaps合并为1 ggmap

时间:2017-09-28 20:05:46

标签: r ggplot2

我正在尝试将数据映射到更高分辨率的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。

1 个答案:

答案 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)

enter image description here

我怀疑如果我将角落坐标转换回Web Mercator,容差问题可能会消失。但这对周五早上来说太麻烦了。 ggmap及其对坐标系的处理不是我现在想要的。您可以尝试将两个g1g2矩阵对象绑定在一起,但您可能必须首先执行反向转换,并且说实话,因为使用Google卫星图像的限制(您拥有< / em>读取许可证条件?)我怀疑它是坏事

要显示栅格对象,请使用tmap包而不是ggmap