Путаница с функцией mask () в растровом пакете - PullRequest
0 голосов
/ 12 июня 2018

Я заранее извиняюсь за очень базовую природу этого вопроса, но меня смущает то, как функция mask () работает в растровом пакете в R.

Чтение документации для функции, которая звучитаналогичные ячейки в растре x устанавливаются в NA (по умолчанию), если эти ячейки соответствуют значению маски в объекте маски (значением маски по умолчанию является NA).Однако описание функции mask () в книге Геокомпьютеры с R автором Lovelace et al.(https://geocompr.robinlovelace.net/spatial-operations.html#spatial-ras) (раздел 4.3.1) звучит так, как если бы ячейки в растре x были KEPT, если они соответствуют значению маски в объекте маски, и установлены в NA, если они этого не делают. Они приводят этот пример:

mask(elev, rmask, maskvalue = TRUE)

"we only want to keep those values of elev which are TRUE in rmask"

Отсюда мое замешательство. Буду признателен, если кто-нибудь сможет уточнить, какая интерпретация правильная.

Причина, по которой я хотел бы знать, заключается в том, что я хотел бы замаскировать растр, содержащийДанные MODIS о процентном покрытии дерева с растром из того же продукта MODIS, который содержит коды качества данных. Я хотел бы сохранить только те значения в растре "древесный покров", которые имеют качественные коды качества в растре "качество"Разъяснение того, как работает функция mask (), поможет мне определить, нужно ли мне использовать код [1] или код [2] для достижения того, чего я хочу:

[1]

good <- c(0,1,2,3,4,5...etc.)  # The codes in the quality raster that represent good quality data

tree_cover_masked <- mask(tree_cover, quality, maskvalue = good, inverse = TRUE)

# i.e. set cells in tree_cover to NA if they match any value OTHER THAN the "good" values in the quality raster.
# This is the code I would use based on my interpretation of the function documentation.

[2]

tree_cover_masked <- mask(tree_cover, quality, maskvalue = good)

# i.e. keep values in tree_cover that match "good" values in the quality raster, and set all others to NA
# This is the code I would use based on my interpretation of Lovelace et al.

Еще раз прошу прощения, если этот вопрос очень упрощенный, но я был бы признателен за вашу помощь!

1 Ответ

0 голосов
/ 13 июня 2018

Что мешает вам сделать небольшой пример и проверить, какой подход работает?В вашем случае ни [1], ни [2] не будут работать, так как значение маски - это одно значение (первое значение, если вы укажете более длинный вектор).Возможно, вы захотите сначала использовать переклассификацию

Пример данных

library(raster)
qual <- trees <- raster(nrow=4, ncol=4, xmn=0, xmx=1, ymn=0, ymx=1, crs='+proj=utm +zone=1')
values(trees) <- rep(1:4, 4)
values(qual) <- rep(1:8, 2)

Создать RasterLayer с хорошими (4 - 8) и плохими (1 - 8) значениями, а затем использовать mask

good <- reclassify(qual, rbind(c(0, 4, NA), c(4, 9, 1)))
# this would also work
# good <- reclassify(qual, cbind(0, 4, NA))

x <- mask(trees, good)

Или:

good <- subs(qual, data.frame(from=c(5,6,7,8,9), 1))
x <- mask(trees, good)
...