【问题标题】:extract() data from raster with small polygons - rounded weights too small从具有小多边形的栅格中提取()数据 - 舍入的权重太小
【发布时间】:2013-07-19 23:20:52
【问题描述】:

使用 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

有两个问题——权重是cell区域被多边形覆盖的比例,权重四舍五入到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

【问题讨论】:

  • 你不能扩展光栅分辨率来捕捉(或接近)覆盖区域的比例吗?
  • @PauloCardoso 谢谢 - 这实际上是我如何解决问题的 4 个想法之一:1)说服提取到理智的行为,2)将光栅单元格转换为多边形,3)在 R 单元格中读取光栅,实际上实现了我自己的extract,4)通过进一步拆分单元格来提高光栅分辨率(你的想法)。因此,这取决于哪种解决方案实际上最简单且计算效率更高。而且我还不知道如何实施这些解决方案......
  • 一个可重现的例子会让这个问题变得有用。
  • @mdsumner 当然。请查看更新后的问题。
  • @Tomas 我也有同样的问题,你找到答案了吗?

标签: r gis spatial raster r-raster


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多