R 水平图在栅格图层投影上叠加两个空间多边形数据帧



也张贴在 gis.stackexchange 上

我在 R 中的水平图中绘制栅格图层和空间多边形数据帧时遇到一些问题。 投影有问题,但我不明白是什么。

在这里你可以找到我的可重现的示例数据和代码:

library(sp)
library(rgdal)
library(rgeos)
library(raster)
library(rasterVis)
library(maptools)
setwd("C:/...path_to/test2")
data<-read.csv("test.csv", header=TRUE)
#creating the raster from a data.frame and giving projection
raster<-rasterFromXYZ(data, crs="+proj=longlat")
raster_proj<-projectRaster(raster, crs="+proj=longlat +datum=WGS84 
+ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
#loading shapes
nuts<-readShapePoly("NUTS_RG_WGS84.shp", proj4string=CRS("+proj=longlat"))
countries<-readShapePoly("countries.shp", proj4string=CRS("+proj=longlat"))
#subsetting the raster
raster_clip<- crop(raster_proj, countries, snap="near")
#plot
p.strip <- list(cex=1.5, lines=1, fontface='bold') 
x.scale <- list(cex=1.5)
y.scale <- list(cex=1.5)
label <- list(labels=list(width=1, cex=1.5), height=0.95)
levelplot(raster_clip, par.settings = RdBuTheme, margin=FALSE,
      at=seq(min(na.omit(values(raster_clip))), max(na.omit(values(raster_clip))), length.out=15),scales=list(x=x.scale, y=y.scale), 
      par.strip.text=p.strip, colorkey=label, xlab=list(label="Longitude", cex=2), ylab=list(label="Latitude", cex=2))+ 
layer(sp.polygons(nuts))+layer(sp.polygons(countries))

错误消息是:

Error: Attempted to create layer with no geom.

但栅格和面位于同一投影中。我还尝试使用以下方法重新投影多边形:

nuts <- spTransform(nuts, CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"))
countries <- spTransform(countries, CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"))

知道吗?

如果你不想

或不能分离 ggplot2,因为你需要它做其他事情,你也可以使用以下命令专门从 latticeExtra 包调用 layer 函数:

levelplot(myRaster) + 
  latticeExtra::layer(sp.polygon(myPolygon))
detach("package:ggplot2", unload=TRUE)

我通过将 ggplot2 从我的库中分离来解决这个问题。

最新更新