从具有小多边形的栅格提取()数据
使用R,我试图使用多边形图层从栅格图层中提取数据。 多边形比栅格单元小得多:
现在我从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) - 其他三个单元格的权重四舍五入为零,它们被排除。 但是,左下角的单元格覆盖了多边形的相当大的比例,并且应该包含在内!
我需要一个适当的加权平均值。 这可以通过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中的提取失败
我认为最简单,但不雅的解决方案是先分解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)
链接地址: http://www.djcxy.com/p/72871.html
上一篇: extract() data from raster with small polygons
下一篇: Python NameError: global name 'assertEqual' is not defined