Обработка NA в функции растрового рельефа

При вычислении уклона из растра высот с использованием функции Terrain из пакета raster возникает эффект границы, когда NA возвращаются для ячеек, имеющих одного или нескольких соседей NA.

library(raster)

elevation <- getData('alt', country='ITA')
x <- terrain(elevation, 'slope', neighbors = 8)
e <- elevation
e[!is.na(e)] <- 1
e[is.na(e)] <- 2
x[!is.na(x)] <- 1
x[is.na(x)] <- 2
y <- e-x
plot(y)

Я ищу возможные способы (или альтернативные функции/пакеты) для переопределения этого граничного эффекта и вычисления наклона для всех ячеек, отличных от NA, на основе количества доступных соседей?

Считаю ли я этот эффект уместным, когда граница создается искусственно из-за размера растра (например, северная Италия, отсоединенная от Австрии, Швейцарии...), в других случаях граница является законной (например, прибрежные ячейки).

Передача na.rm = TRUE в ландшафт не меняет результат.

Большое спасибо!


person JGMolinos    schedule 14.03.2018    source источник


Ответы (1)


Это был бы простой обходной путь:

Сначала загрузите данные высот без маски (вы можете замаскировать их позже, если это необходимо):

elevation <- getData('alt', country='ITA',mask=F)

Теперь вы можете предположить, что вся ваша высота NA представляет собой поверхность моря/океана и, следовательно, имеет значение 0.

Таким образом, вы можете установить NAs на 0:

elevation[is.na(elevation)] <- 0

Это должно устранить все проблемы с границами из-за значений NA.

person Val    schedule 14.03.2018
comment
Оно делает. Спасибо! - person JGMolinos; 15.03.2018
comment
@JGMolinos Рад, что это помогло. Пожалуйста, рассмотрите возможность принятия ответа в качестве решения, если он ответил на ваш вопрос. Спасибо! - person Val; 15.03.2018