R 中 Google 地图背景上的重叠图像图
Overlap image plot on a Google Map background in R
我正在尝试添加在威尼托(意大利地区)上定义的函数图
由image
和contour
获得:
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)
但我不知道用于将 image
和 contour
定义的地块添加到地图的命令
包 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()
的帮助和包插图以获取更多示例。
我正在尝试添加在威尼托(意大利地区)上定义的函数图
由image
和contour
获得:
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)
但我不知道用于将 image
和 contour
定义的地块添加到地图的命令
包 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()
的帮助和包插图以获取更多示例。