R 中 Google 地图背景上的重叠图像图

Overlap image plot on a Google Map background in R

我正在尝试添加在威尼托(意大利地区)上定义的函数图

imagecontour获得:

image(X,Y,evalmati,col=heat.colors(100), xlab="", ylab="", asp=1,zlim=zlimits,main=title)
contour(X,Y,evalmati,add=T)

(在这里你可以找到对象:https://dl.dropboxusercontent.com/u/47720440/bounty.RData

在 Google 地图背景上。

我尝试了两种方法:

包 RGoogle地图

我下载了地图mbackground

MapVeneto<-GetMap.bbox(lonR=c(10.53,13.18),latR=c(44.7,46.76),size = c(640,640),MINIMUMSIZE=TRUE)
PlotOnStaticMap(MapVeneto)

但我不知道用于将 imagecontour 定义的地块添加到地图的命令

包 loa

我这样试过:

lat.loa<-NULL
lon.loa<-NULL
z.loa<-NULL
nx=dim(evalmati)[1]
ny=dim(evalmati)[2]
for (i in 1:nx)
{
    for (j in 1:ny)
    {
        if(!is.na(evalmati[i,j]))
        {
            lon.loa<-c(lon.loa,X[i])
            lat.loa<-c(lat.loa,Y[j])
            z.loa<-c(z.loa,evalmati[i,j])
        }
    }
}

GoogleMap(z.loa ~ lat.loa*lon.loa,col.regions=c("red","yellow"),labels=TRUE,contour=TRUE,alpha.regions=list(alpha=.5, alpha=.5),panel=panel.contourplot)

但情节与第一个不同:

在这个情节的图例中我有 7 种颜色,情节只使用这些值。 image 情节更准确。

如何将 image 绘图添加到 Google 地图背景?

我不是很在意这个话题,但是 Lovelace, R17=] 可能对你有帮助 https://github.com/Robinlovelace/Creating-maps-in-R/raw/master/intro-spatial-rl.pdf From section "Adding base maps to ggplot2 with ggmap" with small changes and data from https://github.com/Robinlovelace/Creating-maps-in-R/archive/master.zip

library(dplyr)
library(ggmap)
library(rgdal)   

lnd_sport_wgs84 <- readOGR(dsn = "./Creating-maps-in-R-master/data", 
                           layer = "london_sport") %>%
  spTransform(CRS("+init=epsg:4326")) 

lnd_wgs84_f <- lnd_sport_wgs84 %>%
  fortify(region = "ons_label") %>%
  left_join(lnd_sport_wgs84@data, 
            by = c("id" = "ons_label"))

ggmap(get_map(location = bbox(lnd_sport_wgs84) )) + 
  geom_polygon(data = lnd_wgs84_f,
               aes(x = long, y = lat, group = group, fill = Partic_Per),
               alpha = 0.5)

如果 GoogleMap 地图的使用不是强制性的(例如,如果您只需要可视化海岸线 + 地图上的一些 depth/altitude 信息),您可以使用包 marmap 来做你想要什么。请注意,您需要安装 github 上可用的最新开发版本的 marmap 才能使用 readGEBCO.bathy(),因为下载 GEBCO 文件时生成的文件格式最近已更改。来自 NOAA 服务器的数据很好,但在您感兴趣的区域不是很准确(只有一分钟分辨率 vs GEBCO 半分钟)。这是我用来制作地图的 GEBCO 数据:GEBCO file

library(marmap)

# Get hypsometric and bathymetric data from either NOAA or GEBCO servers
# bath <- getNOAA.bathy(lon1=10, lon2=14, lat1=44, lat2=47, res=1, keep=TRUE)
bath <- readGEBCO.bathy("GEBCO_2014_2D_10.0_44.0_14.0_47.0.nc")

# Create color palettes for sea and land
blues <- c("lightsteelblue4", "lightsteelblue3", "lightsteelblue2", "lightsteelblue1")
greys <- c(grey(0.6), grey(0.93), grey(0.99))

# Plot the hypsometric/bathymetric map
plot(bath, land=T, im=T, lwd=.03, bpal = list(c(0, max(bath), greys), c(min(bath), 0, blues)))
plot(bath, n=1, add=T, lwd=.5)  # Add coastline

# Transform your data into a bathy object
rownames(evalmati) <- X
colnames(evalmati) <- Y
class(evalmati) <- "bathy"

# Overlay evalmati on the map
plot(evalmati, land=T, im=T, lwd=.1, bpal=col2alpha(heat.colors(100),.7), add=T, drawlabels=TRUE) # use deep= shallow= step= to adjust contour lines
plot(outline.buffer(evalmati),add=TRUE, n=1) # Outline of the data

# Add cities locations and names
library(maps)
map.cities(country="Italy", label=T, minpop=50000)

由于您的 evalmati 数据现在是一个 bathy 对象,您可以像调整地图背景一样调整它在地图上的外观(调整等高线的数量和宽度,调整颜色渐变等)。 plot.bath() 同时使用 image()contour(),因此您应该能够获得与使用 image() 绘图时相同的结果。请查看 plot.bathy() 的帮助和包插图以获取更多示例。