извлечение растра по атрибутам в R - PullRequest
0 голосов
/ 03 марта 2012

Я пытался создать новый растровый объект, который содержит только пару значений из существующего растра. Я использую растр класса, найденный здесь: https://www.ga.gov.au/products/servlet/controller?event=FILE_SELECTION&catno=71071.

class       : RasterLayer  dimensions  : 14902, 19161, 285537222 (nrow, ncol, ncell) 
resolution  : 0.002349, 0.002349  (x, y) 
extent      : 110, 155.0092, -45.0048, -9.999999  (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0  
values      : G:\Spatial data\environmental_layers\Australian data\Land cover\Class\DLCDv1_Class.tif  
min value   : 1  
max value   : 34

Я пробовал:

pr <- rasterToPoints(r) # but the file is to big

и

s <- r[r>30 & r<33] # but the file is to big

и

rc <- reclass(r, c(-Inf,30,NA, 31,32, 1, 33,Inf,NA))

, который создает растр со свойствами:

class       : RasterLayer 
dimensions  : 14902, 19161, 285537222  (nrow, ncol, ncell)
resolution  : 0.002349, 0.002349  (x, y)
extent      : 110, 155.0092, -45.0048, -9.999999  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
values      : C:\Users\Adam\AppData\Local\Temp\R_raster_tmp\raster_tmp_61931056968.grd 
min value   : 1 
max value   : 33

Я думал, что это создаст растровый слой со значениями NA и 1, но он имеет 33 значения. Я изо всех сил пытался найти способ «извлечь по атрибуту», используя R для такого большого файла. У кого-нибудь есть предложения, как мне это сделать?

1 Ответ

2 голосов
/ 03 марта 2012

reclassify() может работать для вас с очень большим растром, но вам нужно правильно указать "is" и становится "matrix".Хотя я не совсем уверен по твоему вопросу, действительно ли это твоя цель, когда ты говоришь «растровый экстракт».

Однако вот как сделать переклассификацию:

Например:

## Create sample raster with values from 0 to 9
r <- raster(nrow=100, ncol=100)
r[] <- trunc(runif(ncell(r))*10)

## Create reclassification table
## Set values 0 to 4 equal to 1
## Set values 5 to 9 equal to NA

isBecomes <- cbind(c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
                   c(1, 1, 1, 1, 1, NA, NA, NA, NA, NA))

r2 <- reclassify(r, rcl=isBecomes)

Я не проверял это в растре, слишком большом, чтобы поместиться в памяти, однакоЯ считаю, что reclassify () может справиться с этим.

...