更改range()以在RasterLayer的特定网格上进行聚合

问题描述 投票:0回答:1

我目前正在处理来自瑞士的一些100x100 m分辨率的数据。我想根据国家网格(坐标f.i. x = 500000,y = 130000)将数据从平方公里汇总到1x1km,这与我的RasterLayer对象的原始范围不同。我已经基于原始范围(= r)为RasterLayer提供了一些代码,并基于瑞士的国家网格单元(= r.agg)为具有新范围的RasterLayer提供了一些代码,并将r.agg绘制在r上(后者是后者),我用红色上色以使边框更明显。

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(或者我完全误解了),那么如果有人可以帮助我解决这个问题,我将非常高兴。提前非常感谢,并为我的奇怪说法感到抱歉,我是分析空间数据的新手。

r aggregate-functions r-raster
1个回答
1
投票

这两个栅格不对齐,因此您不能仅依靠聚合。你可以做>

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)
© www.soinside.com 2019 - 2024. All rights reserved.