我是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使用底图上的坐标进行密度估算?
非常感谢!!!希望有人可以帮助我。
答案 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])
拉伸结果可能是由您提供的数据样本引起的。
答案 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()
注意:我已经缩小了一点,所以你可以看到左边的土地,以及“热量”。指向右边。