从小多边形的栅格中提取数据 - 圆形权重太小

8
使用R语言,我正在尝试使用多边形图层从栅格图层中提取数据。这些多边形比栅格单元格要小得多。

enter image description here

现在我从 raster 库调用 extract()

a <- extract(raster, polygons, weights = TRUE, small = TRUE)
a
# ...
# [[1551]]
# value weight
#   209   0.03 # top left cell - more than 50% of the polygon area

有两个问题 - 权重是多边形覆盖的单元格区域比例,而权重被舍入为1/100。在我的情况下,只有左上角的单元格出现在输出中(值为209) - 另外3个单元格的权重被舍入为零并被排除在外。然而,左下角的单元格覆盖了多边形的重要部分,也应该被包括在内!

我需要一个适当的加权平均数。是否可以使用extract()以其他方式完成?或者其他方法?

PS: 附注:我认为extract()中的权重设计得不太好 - 权重应该是特定单元格覆盖的多边形区域比例,而不是相反。然后,对于多边形的加权平均值也更容易计算(只需将每行中的两个数字相乘并求和),而舍入为1/100也不会成为大问题。

可重复的示例 - (下载文件 - 简化版本,实际数据要大得多):

require(raster)
rast <- raster("my.tif")
poly <- readOGR(".", "socc_buff_Rx")
a <- extract(rast, poly, weights = TRUE, small = TRUE)
a

相关链接:在R中提取小多边形和栅格数据失败


你不能扩展光栅分辨率以捕捉(或接近)覆盖区域的比例吗? - Paulo E. Cardoso
@Tomas 我有同样的问题,你找到答案了吗? - Herman Toothrot
我也认为有必要回答这个问题。@mdsumner 有什么建议吗? - ego_
我还没有找到任何解决方案(如果我找到的话,我会发布它)。 我的解决方法是扩大多边形(缓冲区)。 真正的解决方法可能是向extract函数的作者发送更改请求,并附上此页面的链接。 任何人都可以这样做。 - Tomas
你有没有建议采用系统化的方法来完成这个任务?与多边形的大小或多边形的分辨率有关吗?我正在使用8x8公里分辨率的光栅数据。 - ego_
显示剩余2条评论
1个回答

4

我认为最简单但不够优雅的解决方案是首先对 RasterLayer 进行分解。我会看一下能否更改提取功能,以便自动针对非常小(相对于单元格大小)的多边形进行分解。

library(raster)
r <- raster("my.tif")
pu <- shapefile("socc_buff_Rx.shp")
p <- spTransform(pu, crs(r))

extract(r, p, weights = TRUE, small = TRUE)
#[[1]]
# value weight
#   209   0.03

rr <- disaggregate(r, 10)
e <- extract(rr, p, weights = TRUE, small = TRUE)
lapply(e, function(x) { aggregate(x[,2,drop=F], list(value=x[,1]), sum ) } )

#[[1]]
#  value weight
#1   197   0.95
#2   209   3.44
#3   256   0.31
#4   293   0.04

plot(r, legend=F)
plot(p, add=T)
text(r)

raster cells with values


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接