簡體   English   中英

重采樣柵格

[英]Resample raster

我正在嘗試將具有高分辨率(25 米)和分類數據(1 到 13)的森林覆蓋柵格重新采樣到具有較低分辨率(~ 1 公里)的新RasterLayer 我的想法是將森林覆蓋數據與其他低分辨率柵格數據結合起來:

  1. 我試過raster::resample() ,但由於數據是分類的,我丟失了很多信息:

     summary(as.factor(df$loss_year_mosaic_30m)) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 3777691 65 101 50 151 145 159 295 291 134 102 126 104 91

    如您所見,新柵格具有所需的分辨率,但也有很多零。 我想這是正常的,因為我曾經在'ngb'選項resample

  2. 第二種策略是使用raster::aggregate()但我發現很難定義一個因子整數,因為分辨率的變化並不簡單(如分辨率的兩倍或類似)。

    我的高分辨率柵格具有以下分辨率,我希望它在相同程度0.008333333, 0.008333333 (x, y)其聚合為0.008333333, 0.008333333 (x, y)分辨率。

     loss_year class : RasterLayer dimensions : 70503, 59566, 4199581698 (nrow, ncol, ncell) resolution : 0.00025, 0.00025 (x, y) extent : -81.73875, -66.84725, -4.2285, 13.39725 (xmin, xmax, ymin, ymax) coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 data source : /Volumes/LaCie/Deforestacion/Hansen/loss_year_mosaic_30m.tif names : loss_year_mosaic_30m values : 0, 13 (min, max)

    我已經按照aggregate幫助的描述嘗試了 ~33.33 的因子:“單元格數是 x 的單元格數除以fact*fact (當事實是單個數字時)。” 盡管如此,生成的柵格數據的行數和列數似乎與我的其他低分辨率柵格的行數和列數不同。

我從未使用過這種高分辨率數據,而且我在計算上也受到限制(其中一些命令可以使用clusterR並行clusterR ,但有時它們比非並行化命令花費的時間相同,特別是因為它們不適用於最近的鄰居計算)。

我缺乏想法; 也許我可以嘗試layerize以獲得計數柵格,但我必須“聚合”並且出現了factor問題。 由於這個過程需要我幾天的時間來處理,我確實想知道在不丟失太多信息的情況下創建較低分辨率柵格的最有效方法

可重現的示例如下:

r_hr <- raster(nrow=70, ncol=70) #High resolution raster with categorical data
set.seed(0)
r_hr[] <- round(runif(1:ncell(r_hr), 1, 5))
r_lr <- raster(nrow=6, ncol=6) #Low resolution raster

第一種策略:信息丟失

r <- resample(r_hr, r_lr, method = "ngb") #The raster data is categorical

策略二:難以定義聚合因子

r <- aggregate(r_hr, factor) #How to define a factor to get exactly the same number of cells of h_lr?

另一種選擇: layerize

r_brick <- layerize(r_hr)
aggregate(r_brick, factor) #How to define factor to coincide with the r_lr dimensions? 

感謝您的幫助!

r_hr <- raster(nrow=70, ncol=70) #High resolution raster with categorical data
set.seed(0)
r_hr[] <- round(runif(1:ncell(r_hr), 1, 5))
r_lr <- raster(nrow=6, ncol=6)

r_hr
#class       : RasterLayer 
#dimensions  : 70, 70, 4900  (nrow, ncol, ncell)
#resolution  : 5.142857, 2.571429  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#data source : in memory
#names       : layer 
#values      : 1, 5  (min, max)

r_lr
#class       : RasterLayer 
#dimensions  : 6, 6, 36  (nrow, ncol, ncell)
#resolution  : 60, 30  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

直接聚合是不可能的,因為 70/6 不是整數。

dim(r_hr)[1:2] / dim(r_lr)[1:2]
#[1] 11.66667 11.66667

最近鄰重采樣也不是一個好主意,因為結果是任意的。

這是您建議的分層方法, dww 也已經展示了

b <- layerize(r_hr)
fact <- round(dim(r_hr)[1:2] / dim(r_lr)[1:2])
a <- aggregate(b, fact)
x <- resample(a, r_lr)

現在你有比例了。 如果你想要一個單一的類,你可以做

y <- which.max(x)

在這種情況下,另一種方法是聚合類

ag <- aggregate(r_hr, fact, modal) 
agx <- resample(ag, r_lr, method='ngb')

請注意, agxy是相同的。 但它們都可能有問題,因為您可能有 5 個類別的單元格,每個類別大約為 20%,因此選擇一個獲勝者是不合理的。

將土地覆蓋圖聚合為 %cover 層是非常標准的做法。 也就是說,你的目標應該是生成 13 層,每一層都類似於該網格單元中的 %cover。 這樣做可以降低分辨率,同時保留盡可能多的信息。 請注意,如果您需要與%不同的匯總統計數據,則應該可以輕松地將以下方法調整為您想要的任何統計數據,方法是更改aggregatefun =函數。

以下方法非常快(在我的筆記本電腦上處理具有 1 億個像元的柵格只需幾秒鍾):

首先,讓我們創建一些虛擬柵格來使用

Nhr <- 1e4 # resolution of high-res raster
Nlr <- 333 # resolution of low-res raster
r.hr <- raster(ncols=Nhr, nrows=Nhr)
r.lr <- raster(ncols=Nlr, nrows=Nlr)
r.hr[] <- sample(1:13, Nhr^2, replace=T)

現在,我們首先將高分辨率柵格聚合到與低分辨率幾乎相同的分辨率(到最接近的整數單元格)。 每個結果圖層都包含該像元內原始柵格值為 N 的區域部分。

Nratio <- as.integer(Nhr/Nlr) # ratio of high to low resolutions, to nearest integer value for aggregation
layer1 <- aggregate(r.hr, Nratio, fun=function(x, na.rm=T) {mean(x==1, na.rm=na.rm)})
layer2 <- aggregate(r.hr, Nratio, fun=function(x, na.rm=T) {mean(x==2, na.rm=na.rm)})

最后,將低分辨率柵格重新采樣到所需的分辨率

layer1 <- resample(layer1, r.lr, method = "ngb") 
layer2 <- resample(layer2, r.lr, method = "ngb")

對每一層重復,並將您的層構建到堆棧或多波段柵格中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM