从具有小多边形的栅格中提取()数据 - 圆角权重太小

时间:2013-07-20 21:41:35

标签: r gis spatial raster r-raster

使用R,我试图使用多边形图层从栅格图层中提取数据。多边形 小于栅格单元格:

enter image description here

现在我从extract()库中致电raster

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()中的权重设计得不是很好 - 权重应该是特定单元格覆盖的 polygon 区域的比例,反之亦然。然后,多边形的加权平均值也将更容易计算(只需将每行中的两个数相乘并求和),并且舍入到1/100不会是一个大问题。

可重复的示例 - (download the files - 简化版,实际数据要大得多):

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

相关: Extract in R fails for small polygons and raster

1 个答案:

答案 0 :(得分: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