使用R绘制NDVI栅格并叠加点图层及提取像素值报错求助
解决方案:NDVI栅格绘图+像素值提取错误修复
1. 栅格加图层绘图错误修复
错误根源
levelplot属于lattice绘图系统,layer()里不能直接用sp包的sp.points()——这个函数是给base绘图用的,lattice的图层必须用panel级别的绘图函数,所以才会报错"无法创建没有geom的图层"。
修正代码
假设test_pts是SpatialPoints类对象:
levelplot(stack(NDVI), scales=list(draw=FALSE), colorkey=FALSE, par.settings=mapTheme) + layer(panel.points(test_pts@coords[,1], test_pts@coords[,2], pch=13, col="red", cex=10, lwd=10))
如果test_pts是sf格式,先提取坐标:sf::st_coordinates(test_pts)再传入panel.points即可。
2. 点像素值提取错误修复
错误根源
- 你用
lapply循环单个RasterLayer对象完全没必要,直接调用extract就行; - raster包的
extract没有method='simple'参数——这是terra包的参数,混用导致报错; - 同时加载raster和terra包时,
extract函数会被覆盖,最好指定包名避免冲突。
修正代码
用raster包(旧版)
# 直接提取单个栅格的点值,指定raster包的extract NDVI_points <- raster::extract(NDVI, test_pts, df=TRUE)
用terra包(新版推荐)
如果NDVI是SpatRaster类型:
# terra的extract支持method参数 NDVI_points <- terra::extract(NDVI, test_pts, method='simple', df=TRUE)
内容的提问来源于stack exchange,提问作者Trav
相关产品推荐
相关产品推荐

