使用R Terra生成河网失败:河网存在不连通问题
使用R Terra替代QGIS PCRaster生成河网时的连通性问题
问题背景
我尝试用R的Terra包替代QGIS中的PCRaster工具生成河网,使用包自带的卢森堡DEM示例数据,调用flowAccumulation()和terrain("flowdir")函数后,得到的河网存在不连通的问题。
Terra官方示例代码
elev <- rast(system.file('ex/elev.tif',package="terra")) flowdir <- terrain(elev,"flowdir") weight <- cellSize(elev,unit="km") flowacc_weight <- flowAccumulation(flowdir,weight) flowacc <- flowAccumulation(flowdir) plot(flowacc)
结果对比
- Terra生成的河网:存在不连通的断裂情况
- QGIS中用PCRaster处理同一份DEM:得到完全连通的汇流累积结果
问题定位
经排查,问题根源在于存在海拔相等的相邻单元格时,Terra的汇流计算逻辑会导致河网出现断裂。
测试用DEM数据
以下两个DEM可用于复现问题:
# 含等高相邻单元格的DEM(会出现河网不连通问题) elev_A <- c(78, 72, 69, 71, 58, 49, 74, 67, 56, 49, 46, 50, 69, 53, 44, 37, 38, 48, 64, 58, 55, 22, 31, 24, 68, 61, 47, 34, 16, 19, 74, 53, 34, 34, 11, 12) |> matrix(ncol = 6, byrow = TRUE) |> rast() # 修改后无等高相邻单元格的DEM(可生成连通河网) elev_B <- c(78, 72, 69, 71, 58, 49, 74, 67, 56, 49, 46, 50, 69, 53, 44, 37, 38, 48, 64, 58, 55, 22, 31, 24, 68, 61, 16, 34, 16, 19, 74, 53, 34, 34, 11, 12) |> matrix(ncol = 6, byrow = TRUE) |> rast()
求助
有没有人遇到过同样的问题?或者有可行的解决思路?
内容的提问来源于stack exchange,提问作者IvorM
相关产品推荐
相关产品推荐

