投影有或没有聚合的栅格时的不同结果

时间:2018-10-24 12:58:30

标签: r raster r-raster map-projections

我的目标是重新投影一个名为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处理值的汇总吗?我想像

1 个答案:

答案 0 :(得分: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