Если вас интересуют данные, а не растровый объект (или vrt / tiff), то это может быть подходом:
Если вы «загружаете» растр из файла, он необязательно означает, что он загружается в память, как объясняется в документации raster
:
Во многих случаях, например, когда RasterLayer создается из файла, он (изначально) не содержит никаких ячеек(пиксельные) значения в (RAM) памяти, он имеет только те параметры, которые описывают RasterLayer.Вы можете получить доступ к значениям ячеек с помощью getValues, extract и связанных функций.Вы можете назначать новые значения с помощью setValues и с заменой.
Таким образом, вы можете сначала «проиндексировать» растр, а затем использовать getValuesBlock
для считывания значений, попадающих в интересующую вас область.
library(raster)
f <- system.file('external/test.grd',package = 'raster')
# index
r <- raster(f)
# check if in memory
inMemory(r)
#[1] FALSE # output
# this would be an extent from your overlapping shapefile
e <- extent(r,58,68,40,50)
# get cells from extent; either use cells as index directly or convert to rowcol
rowcol <- rowColFromCell(r,cellsFromExtent(r,e))
v <- getValuesBlock(r,row=rowcol[1,1],nrows=(rowcol[nrow(rowcol),1] - rowcol[1,1]),
col=rowcol[1,2],ncols=(rowcol[nrow(rowcol),2] - rowcol[1,2]))
v
# [1] 295.392 225.710 258.595 310.336 324.666 322.702 307.217 283.611 263.987 156.609 322.978 297.565 301.797 315.971
# [15] 323.605 326.920 317.894 297.138 270.027 225.769 337.503 323.388 314.900 308.877 314.556 343.555 344.035 315.400
# [29] 291.188 270.876 337.866 324.632 307.220 278.294 264.379 348.519 356.456 322.450 301.790 285.815 331.383 318.950
# [43] 299.246 262.026 230.869 294.012 320.274 312.777 300.513 285.317 321.075 311.447 296.952 278.519 270.279 283.797
# [57] 296.415 298.861 293.150 277.573 306.692 300.772 289.376 273.141 258.457 258.638 272.966 283.977 284.621 271.690
# [71] 286.749 286.617 275.618 247.307 198.884 193.865 240.465 268.687 277.303 271.431 260.336 271.458 263.977 231.071
# [85] 161.407 154.181 222.417 258.672 271.711 272.642 235.458 258.810 257.763 239.553 209.409 205.905 234.162 255.668
# [99] 266.260 270.532
РЕДАКТИРОВАТЬ:
# check if raster was loaded after getValuesBlock
inMemory(r)
#[1] FALSE