R Levelplot在RasterLayer投影

时间:2016-05-24 21:57:24

标签: r spatial levelplot

也发布在gis.stackexchange

我在R中的水平图中绘制RasterLayer和SpatialPolygonsDataFrame时遇到了一些麻烦。投影出了问题,但我不明白。

在这里你可以找到我的 reproducible example data和代码:

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

任何想法?

3 个答案:

答案 0 :(得分:4)

如果您不想或不能分离ggplot2因为您需要其他东西,您还可以使用以下命令专门从latticeExtra包中调用layer函数:

levelplot(myRaster) + 
  latticeExtra::layer(sp.polygon(myPolygon))

答案 1 :(得分:2)

detach("package:ggplot2", unload=TRUE)

答案 2 :(得分:1)

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