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

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

最佳答案

我认为最简单但不优雅的解决方案是首先分解 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

关于r - 从具有小多边形的栅格中提取()数据 - 舍入权重太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17766989/

相关文章:

大型术语文档矩阵/simple_triplet_matrix 的行总和? {tm包}

r - 在 R 中打开栅格!和一些统计操作

gis - 如何使用 geotrellis 修复 geotiff 中丢失的 SRS

r - 如何将城市点映射到美国 map 并移动坐标以留出区域之间的空间?

r - dplyr 中的向量化列运算

ruby-on-rails - NoMethodError(未找到 R 函数 "get")

R 增量 - 避免循环

javascript - 如何检测使用 Leaflet-draw-toolbar 插件创建的弹出菜单中的 "delete"或 "edit"事件?

c# - 在 C# 中将 UTM 坐标解析为 DBGeography

database - RTree 前步骤 : Divide a set of points into rectangular regions each containing one point