如何从多边形数据中提取栅格值,然后加入到空间数据帧中



我想将多边形数据和栅格数据合并到一个数据框架中,以便在r中使用随机森林包
这包括首先提取每个多边形的平均栅格值。

到目前为止,我有以下内容:
#load libraries
library(raster)
library(rgdal)
library(sp)
library(maptools)
#import raster data 
r <- raster("myRasterdata.tif")
#import polygon data 
p <- readShapePoly("myPolydata.shp")
#extract mean raster value for each polygon
ExtractMyData <- extract(r, p, small=TRUE, fun=mean, na.rm=TRUE, df=FALSE,  nl=1, sp=TRUE)
# note I have also tried this with df=TRUE and sp=FALSE

输出是一个矩阵,我可以将其写入数据帧。但它没有空间坐标或原始多边形id,所以我不知道如何将输出加入到同一个数据库中。我认为sp=TRUE参数可以做到这一点,但它似乎不起作用。

请注意,我实际上必须将多边形转换为点(使用质心方法?)为了随机森林的目的,所以我可以猜测我真正想要的是将平均栅格值连接到点,而不是多边形。

任何建议都将非常感谢。谢谢你! !

这行得通:

library(raster)
library(sp)
library(maptools)

#import polygon data 
data(wrld_simpl)
p <- wrld_simpl
#create raster data 
r <- raster(extent(p))
r[] <- seq_len(ncell(r))

## this does it directly, adding columns "names(r)" to "p" 
p <- extract(brick(r, r * 2), p, fun = mean, na.rm = TRUE, sp = TRUE)

你也可以更手动地做,看看如何提取一个聚合函数给出一个单列向量:

p$ExtractData <- extract(r, p, fun = mean, na.rm = TRUE)

或者你可以在多层光栅上工作,像这样一列一列地工作:

b <- brick(r, r * 2)
extr <- extract(b, p, fun = mean, na.rm = TRUE)
for (i in seq_len(ncol(extr))) p[[colnames(extr)[i]]] <- extr[,i]

相关内容

最新更新