我想在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
}
答案 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