Циклический растровый процесс в R - PullRequest
0 голосов
/ 21 ноября 2018

Я бы хотел использовать пакет Raster в R для обработки одной матрицы высот.Я хотел бы использовать заранее определенный список значений высот для извлечения нескольких наборов растровых данных из этой матрицы высот.Не все значения имеют одинаковый интервал.Например, моя матрица высот находится в диапазоне от 5000 до 6000 футов. Я хотел бы использовать заранее определенный список из 10 значений для обрезки этого растра (аналогично инструменту «извлечение по атрибуту» в Spatial Analyst).Значения не имеют равных интервалов, например: 5105 5225 5450 5500.,,и так далее ...

На каждом шаге я хотел бы извлечь все значения МЕНЬШЕ, чем конкретное значение (например, где Значение <5,105). </p>

Если бы я это сделалвручную, я бы настроил пакетный запуск, чтобы повторно использовать инструмент «извлечение по атрибуту» в Spatial Analyst.Я не хочу этого делать.В будущем у меня будет много входных ЦМР, и я хотел бы разработать сценарий для быстрого выполнения этих действий.

У кого-нибудь есть идеи?

Вот мой код (все еще нужна помощь с циклом for для создания отдельных ЦМР).Приведенный ниже код не создает отдельных выходных растров на каждом слое отметки.Мне нужно создать отдельные выходные растры (количество выходных растров равно количеству значений в списке уровней).TIA!

library (rgdal) 
library (raster) 
#Import the DEM 
dem <- raster("Path/to/DEM.tif") 

#List of Elevations
elevs = c(5175.5, 5176.50, 5177.0, 5177.25, 5178.00) 

#Extract DEM at at elevations less than elevs list 
#This can be done manually as follows: 
dem.5175.5 <- dem    
dem.5175.5[dem.5175.5>5175.5]=NA 

#Trying to do this iteratively through the list of elevs
#Need help here...

dem.copy <- dem 
for (i in elevs) {   
   dem.copy[dem.copy>i]=NA 
} 

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Попробуйте это: (эти команды создали растр для каждого компонента в 'elev'. Обратите внимание на 5177.0 с именем dem.5177))

for (i in elevs) {  
    v.name <- paste('dem', i, sep = '.')
    aux <- dem
    aux[aux>i] <- NA
    assign(v.name, aux)    
} 
paste('dem', elevs, sep = '.')
dem.5175.5
dem.5178
0 голосов
/ 21 ноября 2018

У меня нет файла DEM для тестирования, но я бы написал вспомогательную функцию и использовал lapply для получения списка демонов, разделенных по вашему вектору elevs.Вот быстрый пример:

DemSplit <- function(dem, elev){
  dem[dem>elev] <- NA
  dem
}

lapply(elev, function(x) DemSplit(dem, x))
...