汇流累积量
最近研究汇流累积量的计算,下了些资料,不过都是英文的看着真的很吃力。
搞明白了其中一种方法,是用Matlab写的:
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 21 16 19
74 53 34 12 11 12
1.算法初始值dem高程值矩阵、x坐标值矩阵和y坐标值矩阵。
2.返回汇流累积量flowacc、坡度slope。
首先计算坡度,采用邻接矩阵36*36表示。
[ic1,icd1] = ixneighbors(dem);
e = (dem(ic1)-dem(icd1))./hypot(X(ic1)-X(icd1),Y(ic1)-Y(icd1));
接着计算汇流方向,这里仍采用邻接矩阵表示,没有采用类似ESRI的D8编码方法。single方式,根据计算8个方向的坡度取最大的,另外一种是Multi方式
还有边缘处理、sink点处理等.
最后采用求多元方程组解的方式求得汇流累积向量flowacc,很神奇,原来矩阵运算可以求累积。
switch params.edges
case 'open';
flowacc = (speye(nrc,nrc)-spdiags(edgecorrection,0,nrc,nrc)*M')\params.W0(:);
otherwise
flowacc = (speye(nrc,nrc)-M')\params.W0(:); %36*1=(36*36-36*36)\36*1,表示(speye(nrc,nrc)-M')*flowacc = params.W0(:);
end
flowacc = reshape(flowacc,siz);
这种方法最后得到的数据比正常的结果都增加了1。
1 1 1 1 1 1
1 2 2 3 3 1
1 4 8 6 5 1
1 1 1 21 1 2
1 1 1 2 25 1
1 3 5 8 36 2
参考D8编码方法:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用