无法使用 levelplot 将多边形叠加到栅格图层

Posted

技术标签:

【中文标题】无法使用 levelplot 将多边形叠加到栅格图层【英文标题】:Unable to overlay polygon to raster layer using levelplot 【发布时间】:2020-07-22 18:43:57 【问题描述】:

我正在尝试通过使用 rasterVis 包将多边形形状文件覆盖在栅格图层上来创建地图。我可以在 raster 包中使用 plot() 函数毫无问题地执行此功能,但我想自定义颜色。出于某种原因, levelplot() 不允许我覆盖栅格和多边形。我的第一次尝试是:

levelplot(raster, margin=FALSE, col.regions=viridis, at=seq(0,1, len=100)+ 层(sp.polygons(多边形)))

我得到这些错误: +.trellis(seq(0, 1, len = 100), layer(sp.polygons(polygon))) 中的错误: 继承(对象,“格子”)不正确

然后我尝试使用 latticeExtra:

levelplot(raster, margin=FALSE, col.regions=viridis, at=seq(0,1, len=100)+ latticeExtra::layer(sp.polygon(polygon)))

我得到与上述相同的错误。 我还尝试了其他建议的解决方案,例如运行 dev.off() 行并重新启动 R,我得到:

dev.off() 中的错误:无法关闭设备 1(空设备)

最后我尝试分离 ggplot2 但我仍然收到相同的“格子”错误消息。我不知道如何解释这个错误信息。我仔细检查了两个文件是否具有相同的 CSR,以防万一出现问题。另外,请注意,栅格图层的绘制没有问题,添加多边形会产生错误。有什么想法吗?

【问题讨论】:

【参考方案1】:

这应该可行:

p <- levelplot(raster, layers=1, margin = FALSE, col.regions=viridis, at=seq(0,1, len=100))
p + layer(sp.polygons(polygon, lwd=0.8, col='darkgray'))

这是一个可重现的例子:

library(sp)
#get raster
data(meuse.grid)
coordinates(meuse.grid) = ~x+y
proj4string(meuse.grid) <- CRS("+init=epsg:28992")
gridded(meuse.grid) = TRUE
meuse.r<- raster(meuse.grid)  
#get polygon
data("meuse.area")
meuse.area = SpatialPolygons(list(Polygons(list(Polygon(meuse.area)), "area")))

#plot
library(rasterVis)
library(viridis)
p <- levelplot(meuse.r, layers=1, margin = FALSE, col.regions=viridis, at=seq(0,1, len=100))
p + layer(sp.polygons(meuse.area, lwd=0.8, col='darkgray'))

【讨论】:

以上是关于无法使用 levelplot 将多边形叠加到栅格图层的主要内容,如果未能解决你的问题,请参考以下文章

急求,arcgis中,如何求每个独立的栅格块的平均值,并将平均值赋予到对应的矢量图块上???

arcgis10.2中怎样把栅格数据矢量化

arcgis叠加的优先级

如何使用arcgis将栅格图转为矢量图,

arcgis 怎样实现栅格图与矢量图动态叠加显示。

arcgis叠加分析