在R中的Google Map背景上重叠图像图

时间:2015-01-11 11:25:30

标签: r google-maps plot

我正在尝试添加Veneto(意大利地区)定义的功能图 enter image description here

通过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地图背景上。

我尝试了两种方法:

PACKAGE RGoogleMaps

我下载了地图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定义的地图添加到地图有用的命令

PACKAGE 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)

但情节不像第一个: enter image description here

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

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

2 个答案:

答案 0 :(得分:5)

我不是真的在这个主题内部,但是Lovelace,R。&#34;在R&#34中可视化空间数据的介绍。可能会帮助你 https://github.com/Robinlovelace/Creating-maps-in-R/raw/master/intro-spatial-rl.pdf来自&#34;使用ggmap&#34添加基本地图到ggplot2;来自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)

enter image description here

答案 1 :(得分:5)

如果不强制使用GoogleMap地图(例如,如果您只需要在地图上显示海岸线+某些深度/高度信息),您可以使用包marmap来执行您想要的操作。请注意,您需要在github上安装最新的marmap开发版本才能使用readGEBCO.bathy(),因为最近更改了下载GEBCO文件时生成的文件格式。来自NOAA服务器的数据很好,但在您感兴趣的区域不是很准确(对于GEBCO,只有一分钟的分辨率 vs 半分钟)。以下是我用来制作地图的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()的帮助和包装插图。

enter image description here