R中的循环栅格处理

时间:2018-11-21 17:58:25

标签: r loops attributes extract raster

我想在R中使用Raster包来处理单个DEM。我想使用预定的高程值列表从此DEM中提取多个栅格数据集。并非所有值都具有相等的间隔。例如,我的DEM范围在5,000到6,000英尺之间。我想使用10个值的预定列表来裁剪此栅格(类似于Spatial Analyst中的“按属性提取”工具)。这些值的间隔不相等,例如:5105 5225 5450 5500。 。 。等等...

在每个步骤中,我要提取所有小于特定值的值(例如,其中Value <5,105)。

如果要手动执行此操作,则将设置批处理运行以重复使用Spatial Analyst中的“按属性提取”工具。我不想那样做。将来我将有很多输入DEM要做,我想开发一个脚本来快速完成这些工作。

有人有什么想法吗?

这是我的代码(仍然需要for循环的帮助才能创建单独的DEM。)下面的代码不会在每个高程切片上生成单独的输出栅格。我需要创建单独的输出栅格(输出栅格的数量等于elevs列表中值的数量)。 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 :(得分:0)

我没有要测试的DEM文件,但是我会编写一个辅助函数,并使用lapply生成由elevs向量分割的dems列表。这是一个简单的示例:

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

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

答案 1 :(得分:0)

尝试以下操作:(这些命令已为'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