【问题标题】:Issue with estimating weighted mean from raster for a polygon shape in R从栅格估计 R 中多边形形状的加权平均值的问题
【发布时间】:2018-12-19 15:57:50
【问题描述】:

我需要估计以正方形显示的多边形的栅格值的加权平均值。我想在多边形形状的每个正方形中获取栅格值及其权重。 (如本帖所示:How can I extract an area weighted sum from a raster into a polygon in R?

但是,请查看下面的代码以及我得到的权重图像。有人可以纠正我在这里做错了什么以及为什么我的输出与上面的帖子中所示的不同。?我想获得上面帖子中的输出。似乎我得到的重量也是错误的。

请在此处查看随附的输入数据集: https://bft.usu.edu/w8crs

谢谢。

library(raster)
library(sp)
library(rgdal)
library(rgeos)

rlist = list.files(getwd(), pattern = "tif$", full.names = TRUE)
inshp = "Test" 
rdata <- rlist[1]

r <- raster(rdata)
sdata <- readOGR(dsn=getwd(), layer=inshp)
sdata <- spTransform(sdata, crs(r))

extract(r, sdata, weights=TRUE)

输出:

[[1]]
    value weight
 56.75139      1

[[2]]
    value weight
 61.18781      1

[[3]]
    value weight
 56.75139      1

[[4]]
    value weight
 61.18781      1

【问题讨论】:

    标签: r weighted


    【解决方案1】:

    这是一个可重现的例子

    library(raster)
    packageVersion("raster")
    #[1] ‘2.8.4’
    r <- raster(xmn=0, xmx=1, ymn=0, ymx=1, nrow=2, ncol=2)
    values(r) <- 1:4
    
    m <- matrix(c(0.4, 0.6, 0.8, 0.6, 0.7, 0.2, 0.3, 0.2), ncol=2, byrow=TRUE)
    s <- spPolygons(m)
    plot(r); lines(s)
    
    extract(r, s, weights=TRUE)
    #[[1]]
    #     value weight
    #[1,]     1 0.0625
    #[2,]     2 0.1875
    #[3,]     3 0.3125
    #[4,]     4 0.4375
    

    这对您不起作用,因为您的多边形相对于栅格像元大小非常小。我已经更改了函数,以提高这些情况的精度。我现在用你的数据得到这个:

    > extract(r, sdata, weights=TRUE)
    [[1]]
        value weight
     56.75139      1
    
    [[2]]
            value    weight
    [1,] 61.18781 0.6592593
    [2,] 56.75139 0.3407407
    
    [[3]]
        value weight
     56.75139      1
    
    [[4]]
            value    weight
    [1,] 61.18781 0.5522388
    [2,] 56.75139 0.4477612
    

    为了让您的多边形之一无需下载即可重现:

    library(raster)
    r <- raster(ncol=2, nrow=1, xmn=596959.624056728, xmx=624633.120455544, ymn=568805.230192675, ymx=582641.978392083, crs='+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m')
    values(r) <- c(61.18781, 56.75139)    
    g <- data.frame(matrix(c(rep(1, 18), rep(0,6), 611318.079488842,611440.751254539,610712.115334383,609842.749239201, 609703.303842618,611318.079488842,581038.816616668,579434.971927127, 579381.167042005,579315.223934334,580917.724282178,581038.816616668), ncol=6))
    colnames(g) <- c('object','part','cump','hole','x','y')
    p <- as(g, "SpatialPolygons")
    crs(p) <- crs(r)
    
    extract(r, p, weights=TRUE)
    
    #[[1]]
    #        value    weight
    #[1,] 61.18781 0.6592593
    #[2,] 56.75139 0.3407407
    

    【讨论】:

    • 这是我想要的输出。见上文,我已经修改了类似于您的代码的代码,但我似乎没有得到正确的权重。如果您查看上面的光栅图像,我将所有权重都设为 1,这是不正确的。
    • 谢谢你的例子。在栅格 2.8-15 中,对于多边形相对于栅格像元大小非常小的情况,我提高了精度。请参阅我的扩展答案。
    猜你喜欢
    • 2021-10-14
    • 2020-03-10
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多