将核密度(kde2d)与基本地图

时间:2017-01-27 14:02:03

标签: r image ggmap

我是R newbie并且有关于将核心密度图像图与底图结合的问题: 示例数据集的子集:

spe <- read.table(text = 'Lat Long
-16.664969 52.85978
-16.663191 52.94521
-16.664250 52.85902
-16.664250 52.85902
-16.665164 52.87561
-16.664374 52.98654
-16.663627 53.12452
-16.663479 52.85833
-16.663479 52.85833
-16.663032 52.85823
-16.664142 52.85848
-16.663351 52.85834
-16.663196 52.85829
-16.663339 52.85803
-16.665213 52.85939
-16.664166 52.85912
-16.664166 52.85912
-16.663654 52.85868
-16.663660 52.85868
-16.661111 52.86002', sep = " ", header = T)

为此我做了一个核密度估计和图像:

library(MASS)
    f1 <- kde2d(spe$Lat, spe$Long, n = 500,h=0.0005)
    image(f1,col= colorRampPalette(c("white", "red"))(15))

现在我想在图片后面放一个谷歌底图但不知道该怎么做,我试过了:

require(ggmap)
    mapImageData1 = get_map(location = c(lon = -16.664, lat = 52.859),
                            color = "color",
                            source = "google",
                            maptype = "satellite",
                            zoom = 16)

    ggmap(mapImageData1)

但是如何将地图与具有匹配坐标的图像结合起来呢?或者是否有另一种方法,尽管kde2d使用底图上的坐标进行密度估算?

非常感谢!!!希望有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

library(MASS)
f1 <- kde2d(spe$Lat, spe$Long, n = 500,h=0.0005)

您可以使用

将内核密度转换为RasterLayer
r1 <- raster(f1)

您可以使用

删除非常低密度的值
r1[r1 < 0.0001 ] <- NA

然后将其添加到ggmap底图,例如I showed in another question

bm <- ggmap(get_map(location = c(lon = -16.664, lat = 52.859), 
                    maptype = "terrain", zoom = 16))

bm + inset_raster(as.raster(r1), xmin = r1@extent[1], xmax = r1@extent[2],
                  ymin = r1@extent[3], ymax = r1@extent[4])

enter image description here

拉伸结果可能是由您提供的数据样本引起的。

答案 1 :(得分:1)

如果你想要一个交互式谷歌地图(而不是静态地图),你可以尝试我的googleway包的开发版,并使用谷歌地图API绘制heatlayer

要使用Google Maps API,您需要api key

## install development version
# devtools::install_github("SymbolixAU/googleway")
library(googleway)
library(magrittr) ## pour les pipes

map_key <- "your_api_key"

google_map(key = map_key, data = spe) %>%
    add_heatmap()

注意:我已经缩小了一点,所以你可以看到左边的土地,以及“热量”。指向右边。

enter image description here