其他
如何分区域计算DEM高程均值与方差
最后,在R语言中计算DEM的高程均值和方差等参数,并生成表格。R语言相关基础知识请参考:R语言安装部署基础
R语言常用代码集
具体操作过程如下:
01
ArcGIS分割DEM
—
我们先来准备用于分割DEM的矢量,在ArcGIS中加载四川县域矢量,为了把DEM切成一个县城一块,我们需要把整个的县域矢量分为各县的单独矢量。
分拆后的矢量如下:
虽然在ArcMap的图层属性中,可以查看DEM的最大值、最小值、方差、均值,但是由于只能一个个查看,批量导出比较困难,在这里我选择用R语言进行批量计算。
02
R批量读取DEM
—
ArcGIS批量裁剪后的DEM如下所示:
每一块DEM都有多个包含“.tif”的文件,这个时候我们就需要使用下面的语句进行读取目录:
#读取文件名
tifnames <- list.files(path = "D:/TEMP/chuandianLandscape/DEMparts", pattern = '.tif$')
#为了读取栅格数据,我们需要将文件名和路径接起来:
tifdir <- paste("D:/TEMP/chuandianLandscape/DEMparts/",tifnames,sep="")
我们使用list.names来提取TIFF文件名。patern中“.tif$”表示输出以“.tif”结尾的文件名,如果是“.tif”就会把所有的带“.tif”的文件全部读取。
03
R批量计算栅格参数
—
完整代码如下:
library(raster)
tifnames <- list.files(path = "D:/TEMP/chuandianLandscape/DEMparts", pattern = '.tif$')
tifdir <- paste("D:/TEMP/chuandianLandscape/DEMparts/",tifnames,sep="")
#批量读取DEM文件
allDEMS <- lapply(tifdir, raster)
#计算DEM最大值
Elemax <- sapply(allDEMS, maxValue)
#计算DEM最小值
Elemin <- sapply(allDEMS, minValue)
#计算均值
Elemean <- sapply(allDEMS, cellStats, stat="mean")
#计算标准差
Elesd<- sapply(allDEMS, cellStats, stat="sd")
#将计算结果和文件名合并
ElevationSummary <- cbind(tifnames, Elemin, Elemax, Elemean, Elesd)
#输出计算结果
write.csv(ElevationSummary, file = "DEM参数计算.csv")
有关文章与参考文献:
ASTER Global Digital Elevation Model全球DEM下载方法
https://www.earthdatascience.org/courses/earth-analytics/lidar-raster-data-r/introduction-to-spatial-metadata-r/
https://stackoverflow.com/questions/52746936/how-to-efficiently-import-multiple-raster-tif-files-into-r