更改 extent() 以在 RasterLayer 的特定网格上聚合

changing extent() to aggregate over a specfic grid of a RasterLayer

我目前正在处理来自瑞士的一些分辨率为 100x100 米的数据。我想根据国家网格(坐标 f.i.x = 500000,y = 130000)将数据从 km-squares 聚合到 1x1km,这与我的 RasterLayer [=33= 的原始范围不同].我已经为基于原始范围 (=r) 的 RasterLayer 和基于瑞士国家网格单元 (=r.agg) 的新范围的 RasterLayer 提供了一些代码,并在 r 上绘制了 r.agg(后者,我将其涂成红色以使边界更明显)。

library(raster)
ncol <- 3677 # same as original RasterLayer
nrow <- 2261 # same as original RasterLayer

## create raster (with original extent)
  r <- raster(ncol = ncol, nrow = nrow) # dimensions of raster
  mat <- matrix(runif(ncol*nrow, 0,2), ncol = ncol, nrow = nrow) # write data
  # create simplified country-borders / buffer
    mat [0:100, 0:ncol] <- NA
    mat [0:nrow, 0:100] <- NA
    mat [(nrow - 100):nrow, 0:ncol] <- NA
    mat [0:nrow, (ncol -100):ncol] <- NA

  r[] <- mat #write data to raster
  extent(r) <- matrix(c(479950, 73950, 847650, 300050), nrow = 2) # define extent 
  proj4string(r) <- "+proj=somerc +lat_0=46.95240555555556
   +lon_0=7.439583333333333 
   +k_0=1 +x_0=600000 +y_0=200000 
   +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 
   +units=m +no_defs"

## create raster (with customised extent)
  r.agg <- r # prepare aggregatable RasterLayer
  extent(r.agg) <- matrix(c(480000, 74000, 847700, 300100), nrow = 2)
  r.agg <- aggregate(r.agg, fact = 10, fun = mean)

  par(bg = 'darkgrey')
  plot(r, col = "red", legend = FALSE)
  plot(r.agg, add = TRUE)

但是,我不能完全确定是否正确解释了结果: 在 "r" 上绘制的 "r.agg" 显示了一条我不太明白的红线。

选项 A(预期结果):extent() 允许我聚合国家网格并聚合空间正确的 100x100m 信息

选项 B(我希望不会发生):extent() 将让我聚合国家网格,但使用原始网格中的数据,而不是来自正确 100x100 正方形的数据。

我没有发现 extent() 的帮助页面特别有用,很高兴收到一些说明。如果选项 B 是这种情况(或者我完全误解了某些东西),那么如果有人可以帮助我解决这个问题,我会非常高兴。非常感谢,抱歉我的措辞很奇怪,我是分析空间数据的新手。

两个栅格没有对齐,所以不能单独依赖聚合。 你可以做到

library(raster)
r <- raster(ncol = 3677, nrow = 2261, ext=extent(479950, 847650, 73950, 300050))
crs(r) <- "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 
   +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs"
r.agg <- raster(nrow=227, ncol=368, ext=extent(480000, 848000, 73100, 300100))

x <- resample(r, r.agg)

或者,获得更多控制权

r.low <- disaggregate(r.agg, 10)
r.low <- resample(r, r.low)
ra <- aggregate(r.low, 10, mean)