第十一章水文分析水文分析是DEM数据应用的一个重要方面。利用DEM生成的集水流域和水流网络,成为大多数地表水文分析模型的主要输入数据。表面水文分析模型应用于研究与地表水流有关的各种自然现象如洪水水位及泛滥情况,或者划定受污染源影响的地区,以及预测当某一地区的地貌改变时对整个地区将造成的影响等,应用在城市和区域规划、农业及森林、交通道路等许多领域,对地球表面形状的理解也具有十分重要的意义。这些领域需要知道水流怎样流经某一地区,以及这个地区地貌的改变会以什么样的方式影响水流的流动。基于DEM的地表水文分析的主要内容是利用水文分析工具提取地表水流径流模型的水流方向、汇流累积量、水流长度、河流网络(包括河流网络的分级等)以及对研究区的流域进行分割等。通过对这些基本水文因子的提取和基本水文分析,可以在DEM表面之上再现水流的流动过程,最终完成水文分析过程。本章主要介绍ArcGIS水文分析模块的应用。ArcGIS提供的水文分析模块主要用来建立地表水的运动模型,辅助分析地表水流从哪里产生以及要流向何处,再现水流的流动过程。同时,通过水文分析工具的应用,也可以有助于了解排水系统和地表水流过程的一些基本的概念和关键的过程,以及怎样通过ArcGIS水文分析工具从DEM数据上获取更多的水文信息。图11.1ArcToolBox中的水文分析模块ArcGIS9将水文分析中的地表水流过程集合到ArcToolbox里,如图11.1所示。主要包括水流的地表模拟过程中的水流方向确定、洼地填平、水流累计矩阵的生成、沟谷网络的生成以及流域的分割等。本章1至5节主要是依据水文分析中的水文因子的提取过程对ArcGIS中的水文分析工具逐一介绍。文中所用的DEM数据在光盘中chp11文件夹下的tutor文件夹里面,每个计算过程以及每一节所产生的数据存放在tutor文件夹的result文件夹里面,文件名与书中所命名相同,读者可以利用该数据进行参照联系。第6节主要是提供了三个使用水文分析工具以及水文分析思想的实例。11.1无洼地DEM生成DEM被认为是比较光滑的地形表面的模拟,但是由于内插的原因以及一些真实地形1(如喀斯特地貌)的存在,使得DEM表面存在着一些凹陷的区域。那么这些区域在进行地表水流模拟时,由于低高程栅格的存在,从而使得在进行水流流向计算时在该区域的得到不合理的或错误的水流方向,因此,在进行水流方向的计算之前,应该首先对原始DEM数据进行洼地填充,得到无洼地的DEM。11.1.1水流方向提取水流方向是指水流离开每一个栅格单元时的指向。在ArcGIS中通过将中心栅格的8个邻域栅格编码,水流方向便可以其中的某一值来确定,栅格方向编码如图11.2所示。图11.2水流流向编码例如:如果中心栅格的水流流向左边,则其水流方向被赋值为16。输出的方向值以2的幂值指定是因为存在栅格水流方向不能确定的情况,此时须将数个方向值相加,这样在后续处理中从相加结果便可以确定相加时中心栅格的邻域栅格状况。水流的流向是通过计算中心栅格与邻域栅格的最大距离权落差来确定。距离权落差是指中心栅格与邻域栅格的高程差除以两栅格间的距离,栅格间的距离与方向有关,如果邻域栅格对中心栅格的方向值为2、8、32、128,则栅格间的距离为2的开平方根,否则距离为1。ArcGIS中的水流方向是利用D8算法,也就是最大距离权落差(最大坡降法)来计算水流方向的。具体计算步骤如下:1.在ArcMap中用左键单击ArcToolbox图标,启动ArcToolbox。2.打开水文分析模块。启动ArcToolbox,展开AnalysisTools工具箱,打开hydrology工具集。3.双击FlowDirection工具,打开如图11.3所示水流方向(FlowDirection)计算对话框。(1)Inputsurfacedata文本框中选择输入数据dem。(2)Outputflowdirectionraster文本框中命名计算出来的水流方向文件名为flowdir,并选择保存路径。(3)在Forcealledgecellstoflowoutward(Optional)前的复选框前打钩,所有在DEM数据边缘的栅格的水流方向全部是流出DEM数据区域。默认为不选择。这一步为可选步骤。图11.3水流方向FlowDirection计算对话框(4)dropraster输出。dropraster是该栅格在其水流方向上与其临近的栅格之间的高2程差与距离的比值,以百分比的形式记录。它反映了在整个区域中最大坡降的分布情况。这一步为可选步骤。(5)单击OK,进行水流方向计算过程。(6)计算完成后,计算出的水流方向数据如图11.4所示。11.1.2洼地计算洼地区域是水流方向不合理的地方,可以通过水流方向来判断那些地方是洼地,然后再对洼地进行填充。有一点必须清楚的是,并不是所有的洼地区域都是由于数据的误差造成的,有很多洼地区域也是地表形态的真实反映,因此,在进行洼地填充之前,必须计算洼地深度,判断哪些地区是由于数据误差造成的洼地而哪些地区又是真实的地表形态,然后在进行洼地填充的过程中,设置合理的填充阈值。图11.4利用FlowDirection工具计算出来的水流方向图图11.5洼地计算对话框1.洼地计算(1)双击hydrology工具集中的Sink工具,弹出洼地计算对话框,如图11.5所示。(2)在Inputflowdirectionraster文本框中,选择水流方向数据flowdir。3(3)在Outputraster文本框中,选择存放的路径以及重新命名输出文件为sink。(4)单击OK进行洼地计算。结果如图11.6所示,深色的区域是洼地。图11.6计算出来的洼地区域2.洼地深度计算(1)双击hydrology工具集中的watershed工具,弹出流域计算对话框,如图11.7所示,用来计算洼地的贡献区域。图11.7洼地贡献区域计算对话窗口(watershed)(2)在Inputflowdirectionraster文本框中选择水流方向数据flowdir,在Inputrasterorfeaturepourpoint文本框中输入洼地数据sink,在pourpointfield文本框中选择value。(3)在Outputraster文本框中设置输出数据的名称为watershsink。(4)单击OK,进行洼地贡献区域的计算。显示结果如图11.8所示。4图11.8计算出来的洼地贡献区域(5)计算每个洼地所形成的贡献区域的最低高程。双击spatialanalysistools工具箱中zonal工具集下的zonalstatistic工具,弹出如图11.9所示的分区统计对话框。1)在Inputrasterorfeaturezonaldata文本框中,选择洼地贡献区域数据watershsink;2)在Inputvalueraster文本框中输入希望进行统计分析的数据层,现在需要统计洼地贡献区域的最低高程,选dem作为valueraster。3)在Outputraster文本框中将输出数据文件命名为zonalmin,存放路径保持不变。4)统计类型选择。在统计类型选择的下拉菜单中有软件所提供的一些统计类型:分别是在分带区域中统计的每一个分带的平均值(mean)、最大值(maximum)、最小值(minimum)、分带中的属性值的变化值(rang)、标准差(std)以及总和(sum)。这里选择最小值作为统计类型。以上设置完毕之后,单击OK,完成计算。图11.9分区统计对话框(6)计算每个洼地贡献区域出口的最低高程即洼地出水口高程。双击spatialanalysistools工具箱中zonal工具集下的zonalfill工具,弹出如图11.10所示的分区统计对话框。在Inputzoneraster文本框中选择watershsink,在Inputweightraster5文本框中选择dem,在Outputraster文本框中将输出数据文件名改为zonalmax,然后单击OK,进行运算。(7)计算洼地深度。加载SpatialAnalyst模块,点击SpatialAnalyst模块的下拉箭头,点击rastercalculator菜单工具,如图11.11,在文本框里面输入sinkdep=([zonalmax]-[zonalmin]),然后点击evaluate进行计算。对于以上(4)、(5)步的计算,可以利用spatialanalysistools工具箱中的mapalgebra工具集的multimapoutput工具进行计算。双击spatialanalysistools工具箱中的mapalgebra工具集下的multimapoutput工具,弹出图11.12的对话框。对于第(4)步,在文本框中输入:E:\chp11\tutor\result\zonalmin=zonalmin(E:\chp11\tutor\result\watershsink,E:\chp11\tutor\dem);对于第(5)步,在文本框中输入:E:\chp11\tutor\result\zonalmax=zonalfill(E:\chp11\tutor\result\watershsink,E:\chp11\tutor\dem);经过以上七步的运算,就可到如图11.13所示的所有洼地贡献区域的洼地深度。通过对研究区地形的分析,可以确定出哪些是由数据误差而产生的洼地,哪些洼地区域又是真实的反映地表形态,从而根据洼地深度来设置合理的填充阈值,使得生成的无洼地DEM更准确的反映地表形态。图11.11洼深度计算图11.10洼地贡献区域边缘最低高程计算对话框图11.12mapalgebra计算窗口611.1.3洼地填充洼地填充是无洼地DEM生成的最后一个步骤。在通过洼地计算之后,知道了原始的DEM上是否存在着洼地,如果没有存在着洼地,那么原始DEM数据就直接可以用来进行以后的河网的生成、流域的分割等。而洼地深度的计算又为在填充洼地时设置填充阈值提供了很好的参考。图11.13计算出的洼地深度图1.双击hydrology工具集中的fill工具,弹出如图11.14所示的洼地填充对话框。2.在Inputsurfaceraster文本框中,选择需要进行洼地填充的原始DEM数据。在Ou3.tputsurfaceraster文本框中设置4.设置一个数5.洼地填平计算,计算后的无洼地DEM见图11.15所示。图11.14洼地填充对话框输出文件名为filldem。Zlimit——填充阈值,当值之后,在洼地填充过程中,那些洼地深度大于阈值的地方将作为真实地形保留,不予填充;系统默认情况是不设阈值,也就是所有的洼地区域都将被填平。单击OK,进行7图11.15经过洼地填充生成的无洼地DEM洼地填充的过程是一个反复的过程。当一个洼地区域被填平之后,这个区域与附近区域再进行洼地计算,可能有会形成新的洼地,所以呢,洼地填充是一个不断反复的过程,直到最后所有的洼地都被填平,新的洼地不再产生为止。因此,当数据量很大时,这个过程会持续一段时间。11.2汇流累积量在地表径流模拟过程中,汇流累积量是基于水流方向数据计算而来的。对每一个栅格来说,其汇流累积量的大小代表着其上游有多少个栅格的水流方向最终汇流经过该栅格,汇流累积的数值越大,该区域越易形成地表径流。由水流方向数据到汇流累积量计算的过程如图11.16所示。水流方向数据汇流累积数据图11.16流水累积量的计算81.基于无洼地DEM的水流方向的计算。计算过程同上一节水流方向的计算一样,使用的DEM数据是无洼地DEM。将生成的水流方向文件命名为fdirfill。2.汇流累积量的计算,如图11.17所示。在得到水流方向之后,可以利用水流方向数据来计算汇流累积量。双击hydrology工具集中的的fillaccumulation工具,打开汇流累积量计算对话框。图11.17汇流累积量计算窗口(1)在Inputflowdirectionraster文本框中,选择由无洼地DEM生成的水流方向栅格数据fdirf