给定地形,如何绘制溪流路径?


23

假设我有一个地形,像往常一样,该地形具有山脊,小溪以及您可以在现实生活地图上找到的所有特征。水从山顶流到较低区域,水的流动路径称为水流路径。

地形以三角形不规则网络(TIN)给出,其中每个点p(x,y)具有z值。如何使用这些信息来构造流的流动路径?这背后的物理原理是什么?

据我所知,最速下降法可以用来解决这个问题。我正在考虑编写自己的流算法,因此我对理论背景感兴趣,而不是使用现有工具。

Answers:


26

可能有不同的实现方式,但是大多数过程将从网格而不是从TIN开始。

最简单的方法是D8程序:您可以计算出水的流动方向。有8种可能,其中8个单元紧邻中央网格单元。您可以先计算这些方向,然后再计算单元的连接方式,最后可以画线。在SAGA中找到了一个简单的实现,它几乎读为伪代码:http : //saga-gis.svn.sourceforge.net/viewvc/saga-gis/trunk/saga-gis/src/modules_terrain_analysis/terrain_analysis/ta_channels/D8_Flow_Analysis。 cpp?revision = 911&view = markup

尽管很简单,但这不是很现实:您不会在每个单元格中都有流。更为先进的算法通常首先关闭水坑(特别是如果您有详细的DEM),然后计算每个单元的集水面积,即为特定单元贡献水的单元数量,然后使用阈值确定是否有水流存在。

SAGA GIS实现了许多此类流域面积方法,您可以在本手册中找到它们的说明,网址为http://sourceforge.net/settings/mirror_choices?projectname=saga-gis&filename=SAGA%20-%20Documentation/SAGA%20Documents/ SagaManual.pdf

它是为较旧版本的SAGA GIS编写的,但是算法的描述仍然相当准确,我将其复制到此处以供快速参考(此内容位于第120页左右),因为它是开源的,因此您可以检查通过查看代码了解实施细节。

  • 确定性8(D8):经典。流量从一个单元的中心到周围一个(只有一个)单元的中心。因此,将流向限制为45o的倍数,这是该方法的大多数缺点的主要原因。(O'Callaghan&Mark 1984)。
  • Rho8:与上述相同,但随机组件应对此进行改进。流动方向由一个随机参数确定,该参数取决于两个相邻相邻单元的长宽比和方向之间的差异。不太有用。。。(Fairfield&Leymarie 1991)。
  • 确定性无穷大(D∞):流量从一个像元流向两个连续的周围像元,因此考虑了二维流量并克服了D8方法的缺点。(Tarboton 1998)。
  • 不伦瑞克数字化救济模型:另一种多流向算法。流动在方向最接近中心单元长宽比的周围单元及其两个相邻单元之间分配。(Bauer,Bork&Rohdenburg 1985)。
  • FD8(在SAGA中简称为“多流向”):一种D8派生的二维流路由算法。(Quinn等,1991)。
  • 运动学路由算法(KRA)。一维流跟踪算法。流动的行为就像滚落在DEM上的球一样,而不会将其位置限制在单元格的中心。(Lea 1992)。
  • 数字高程模型网络(DEMON):最复杂的模型。二维流跟踪算法。相当耗时。(Costa-Cabral&Burgess 1994)。

最近添加了更多模型:

  • 三角多重流向-Seibert,J. / McGlynn,B.(2007):“一种新的三角多重流向算法,用于从网格化数字高程模型计算上坡区域”,水资源研究,第1卷。43,WO04501。这可能对您来说很有趣,因为它也可以直接在TIN上运行
  • 格鲁伯和佩克汉姆(Gruber and Peckham,2008)提出的基于流量的DEM计算的质量流量方法(MFM)。Gruber,S.,Peckham,S.(2008):水文学中的土地表面参数和对象。在:Hengl,T.和Reuter,HI [编辑]:地貌法:概念,软件,应用程序。《土壤科学进展》,爱思唯尔,Bd.33,S.293-308。
  • 辅助算法:http : //watershed.montana.edu/Hydrology/Home_files/2010WR009296.pdf,他的代码也位于他的网站上:http : //thomasgrabs.com/side-algorithm/


4

如果可以访问ArcGIS中的Spatial Analyst,则可以使用一系列工具来计算流路径。甲完整的工作流程在ESRI参考提供的,但典型的工作流包括:

  1. 将您的TIN转换为高程栅格。
  2. 计算流向。
  3. 装满小水槽。
  4. 计算流量累积
  5. 使用阈值,仅选择具有给定流量的单元格。
  6. 使用“特征流”工具将流导出到矢量shapefile。

当然,有许多学术论文描述了不同的方法,但是这种方法对于所有有权使用Spatial Analyst的人来说都很容易。


我将不得不从头开始编写代码,因此无法使用此软件包。
Graviton

好吧,这似乎是大多数GIS软件包使用的过程。TerraFlow是一个开源选项,但我从未使用过。您打算使用什么来处理TIN?
Patrick

1
我正在考虑编写自己的流算法,这就是为什么您提到的软件包不适用于我
Graviton

2
好的。当您说“我不太清楚如何执行此操作”时,我以为您想要有关如何执行此操作的实用建议。这些软件包使用的工作流程大概可以为算法的总体结构提供指南。我建议您从那里查阅有关具体知识的学术文献。例如,我在寻找流向算法时曾多次引用过Tarboton,1997
Patrick

3

在基于网格的数字高程模型中,D8-LTD方法提供了可靠的坡度线确定:

Orlandini,S.和G.Moretti(2009),《从网格高程数据确定地表水流路径》,《水资源》。Res。,45(3),W03417,doi:10.1029 / 2008WR007099。

Orlandini,S.,G.Moretti,M. Res。,39(6),1144,doi:10.1029 / 2002WR001639。

在基于轮廓的数字高程模型中,可以使用以下论文中描述的(复杂)模型通过求解复杂的地形结构来自动确定坡度线:

Moretti,G.和S. Orlandini(2008),使用骨架构造技术从轮廓高程数据自动描绘流域盆地,水资源。Res。,44(5),W05403,doi:10.1029 / 2007WR006309。


1

似乎从头开始编写工具将是一项相当大的工作。ESRI已经这样做了数十年,但他们仍然没有权利。

AutoCAD(Civil 3D)可以使用TIN。我不知道场景背后发生了什么,但是在ArcGIS中,通过栅格分析来确定流网络。

简而言之,将输入DEM栅格(每个像元具有X,Y,Z值)用作输入,并且算法计算引用 流入输入栅格中每个下坡像元的所有像元的“累积流量(作为累积权重)”。 ” 该乘积是一个栅格,其中每个像元都有一个流量累积值。为了识别河流网络,然后隔离高流量的单元,这些单元是“集中流量”的区域。还有其他考虑因素,例如可选的权重因子,水文正确输入DEM等。

我只想提出几个想法:就这种算法的“力学”而言,我认为它可能很简单。递归地为每个像元确定所有周围像元的位置和高程,并根据其标高累加流入其中的像元数。至于TIN,您可能可以在每个三角形的两个点(最高和最低顶点)上构造一条线,然后将所有这些点连接成一个网络。


1
在处理水槽和平坦区域时会出现复杂问题。举一个极端的例子,考虑一个代表高山湖泊的DEM,因此大多数DEM都是完全平坦的。到底递归实现将如何将所有流入湖泊的流量路由到其流出点?
whuber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.