изменение экстента () для агрегирования по специальной сетке RasterLayer - PullRequest
0 голосов
/ 19 октября 2019

В настоящее время я работаю с некоторыми данными из Швейцарии с разрешением 100x100 м. Я хотел бы объединить данные в 1x1 км от км-квадратов на основе национальной сетки (с координатами fi x = 500000, y = 130000), отличающейся от исходного экстента моего объекта RasterLayer. Я предоставил некоторый код для RasterLayer на основе исходного экстента (= r) и RasterLayer с новым экстентом, основанным на ячейках национальной сетки в Швейцарии (= r.agg), и нанес на график 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.agg» над «r» показана красная линия, котораяЯ не совсем понимаю.

combined plot using example code

Вариант A (желаемый результат): extent() позволяет мне агрегировать по национальной сетке и агрегировать по пространственно корректной информации 100x100 м

Вариант B (который, я надеюсь, не произойдет): extent() позволит мне агрегировать по национальной сетке, но используя данные из исходной сетки, а, следовательно, не из правильных квадратов 100x100.

Я не нашел страницу справки для extent() особенно полезной и был бы рад получить некоторые разъяснения. Если бы вариант B был (или я что-то неправильно понял), я был бы очень рад, если бы кто-нибудь мог помочь мне разобраться в этом. Заранее большое спасибо и извините за мои странные выражения, я новичок в анализе пространственных данных.

1 Ответ

2 голосов
/ 19 октября 2019

Два растра не выровнены, поэтому вы не можете полагаться только на агрегат. Вы можете сделать

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...