【问题标题】:different results when projecting raster with or without aggregate投影带有或不带有聚合的栅格时的不同结果
【发布时间】:2018-10-24 12:58:30
【问题描述】:

我的目标是重新投影一个名为 pftnc 的栅格,使其具有与另一个栅格 sp 相同的 CRS 和像元大小,因此它们可以完美重叠并且可以堆叠。此处提供文件pftncsp

我认为这是软件问题,请参阅另一个问题 https://gis.stackexchange.com/questions/299935/extract-values-from-raster-r-and-arcgis-different-results,但我在 R 中存在不一致。所以我想先找到 R 解决方案。

我尝试过直接重新投影

pft1 <- projectRaster(pftnc, sp)

并且还尝试先聚合再重新投影

pftagg <- aggregate(pftnc, fact=4)
pftproj1 <- projectRaster(from=pftagg, to=sp)

我也尝试过仅进行投影,然后进行裁剪和聚合或其他方式,但我永远无法获得使用 to=sp 时得到的结果,所以我放弃了这条路线。 例如

cea=crs(sp)
pftproj2 <- projectRaster(pftnc, crs=cea)

问题是 pftproj1 和 pft1 具有相同的行、列、范围和分辨率,但值不同。

> cellStats(pftproj1,mean)
[1] 0.1955
> cellStats(pft1,mean)
[1] 0.2028

是否有正确的操作顺序来实现这个目标?我应该让 projectRaster 处理值的聚合吗?我想

【问题讨论】:

    标签: r raster r-raster map-projections


    【解决方案1】:

    我不知道是否有“最佳”方法。我认为你得到差异的主要原因是,如果你先聚合,你会得到更多的单元格(如果聚合 na.rm=TRUE)。如果您使用mask 严格比较相同的单元格,差异会小得多。

    library(raster)
    sp <- raster("sp.tif")
    pf <- raster("pftnc.tif")
    
    pf1 <- projectRaster(pf, sp)
    pfa <- aggregate(pf, fact=4)
    pf2 <- projectRaster(from=pfa, to=sp)
    pf2m <- mask(pf2, pf1)
    
    # an alternative that I would not recommend
    pfr <- projectRaster(pf, crs=crs(sp))
    pf3 <- resample(pfr, sp)
    pf3m <- mask(pf3, pf1)
    
    cellStats(pf, mean)
    #[1] 0.2202417
    cellStats(pf1, mean)
    #[1] 0.2027533
    cellStats(pf2, mean)
    #[1] 0.1954503
    cellStats(pf2m, mean)
    #[1] 0.2024068
    cellStats(pf3, mean)
    #[1] 0.2016164
    cellStats(pf3m, mean)
    #[1] 0.2021608
    

    在问题中最好使用代码生成的示例数据。在您的情况下,您可以使用

    sp <- raster(nrow=142, ncol=360, ext=extent(-17367529, 17367529, -6356742, 7348382), crs="+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m")
    
    pf <- raster(ncol=1440, nrow=720, xmn=-180, xmx=180, ymn=-90, ymx=90, crs='+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0')
    values(pf) = rep(c(1:4,NA), ncell(pf)/5)
    

    但是......差异消失了,除了“坏”方法。不确定这是由于您的值的分布,还是由于 NA 值的作用,但我想您可以尝试找出答案。

    cellStats(pf, mean)
    #[1] 2.5
    cellStats(pf1, mean)
    #[1] 2.5
    cellStats(pf2, mean)
    #[1] 2.5
    cellStats(pf2m, mean)
    #[1] 2.5
    cellStats(pf3, mean)
    #[1] 2.547783
    cellStats(pf3m, mean)
    [1] 2.547783
    

    【讨论】:

    • 感谢您的反馈,我将不得不调查。
    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 2017-03-06
    • 1970-01-01
    • 2013-10-19
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多