R语言根据研究区DEM数据进行子流域划分

对于根据DEM数据进行填洼、提取最大汇水路径、流域范围和子流域划分的任务,你可以使用`WhiteboxTools`包来完成。以下是一个简单的步骤示例:

首先,确保已经安装了`WhiteboxTools`包。可以通过以下命令来安装它:


remotes::install_github("jblindsay/whiteboxR")
 

然后,按照以下步骤进行操作:

1. 读取DEM数据。使用`whitebox_tools`函数中的`lidar_tin_gridding`工具将DEM数据转换成TIN格式。


library(whitebox)

# 读取DEM数据
dem <- "路径/DEM文件.tif"
tin <- paste0(dem, ".tin")
wbt <- whitebox_tools()
wbt$run_tool("lidar_tin_gridding", list("-i", dem, "-o", tin))
 

2. 填洼操作。使用`pit_remove`工具进行填洼处理,生成填洼后的DEM数据。


filled_dem <- paste0(dem, "_filled.tif")
wbt$run_tool("pit_remove", list("-i", tin, "-o", filled_dem))
 

3. 提取最大汇水路径。使用`d8_flow_accumulation`工具计算流量累积,并使用`max_upslope_flowpath`工具提取最大汇水路径。


flow_accumulation <- paste0(filled_dem, "_flow_accumulation.tif")
wbt$run_tool("d8_flow_accumulation", list("-i", filled_dem, "-o", flow_accumulation))
max_flowpath <- paste0(dem, "_max_flowpath.shp")
wbt$run_tool("max_upslope_flowpath", list("-i", flow_accumulation, "-o", max_flowpath))
 

扫描二维码关注公众号,回复: 15531509 查看本文章

4. 提取流域范围。使用`watershed`工具进行流域提取,并将结果保存为矢量要素文件。


watershed <- paste0(dem, "_watershed.shp")
wbt$run_tool("watershed", list("-b", filled_dem, "-s", flow_accumulation, "-o", watershed))
 

5. 进行子流域划分。使用`subbasins`工具进行子流域划分,并将结果保存为矢量要素文件。


subbasins <- paste0(dem, "_subbasins.shp")
wbt$run_tool("subbasins", list("-p", max_flowpath, "-o", subbasins))
 

请注意,上述示例中的代码需要替换文件路径和文件名参数为实际情况。此外,`WhiteboxTools`是一个强大的开源GIS工具库,还包含许多其他有用的工具,可以根据自己的需求进一步探索。

猜你喜欢

转载自blog.csdn.net/2301_77925375/article/details/131389620