王新华
(云南农业大学水利学院,云南 昆明 650201)
大断面是河道水道断面扩展至历年最高洪水位以上0.5~1.0m的断面,用于研究测站断面变化情况以及在测流时不施测断面可供借用的断面。根据大断面测量的起点距、河底高程需要绘制大断面形状并计算出不同水位下的过水断面面积,配合测流资料、水位流速曲线可进行高低水位的水位流量关系曲线的展延。根据大断面测量资料进行大断面水位面积计算是水文与水资源专业工程技术人员必备的一项技能,以往都是手工绘制大断面图并量算不同水位下的面积,即在格网纸上设置适当的纵横坐标刻度比例尺,将断面测量起点距及高程点成对点绘在格网纸上,从左到右依次用直线连接各测点可得到大断面图。计算某一水位下的过水断面面积时,常用格网法、平行线法。格网法是通过统计该水位下河道断面所占据的总的方格数(不满整格的一律按1/2格计算),乘以每个方格所代表的面积得到过水断面面积;平行线法是将水面以下面积分割成高位△z的梯形,通过量算梯形上下底所代表的水面宽度,利用梯形面积计算公式计算出该层面积,从河底累加各层面积至指定水位处可得到该水位下的面积。在断面测量数据较多时,手工绘制大断面图比较费时,在手工绘制大断面图上量算不同水位下的面积,进而绘制水位面积曲线,不论是平行线法还是格网法,任务都非常繁重,极易出错。随着计算机的普及应用,人们尝试采用计算机编程来解决这类问题[1- 3],但程序代码一般都较为晦涩难读,对于不熟悉编程语言的测站工作人员而言,理解和使用软件有一定的难度,开发出一个简便实用的大断面绘图及面积计算工具,显得十分必要。Excel表格作为一款最常用的办公软件,内置了大量函数,具有强大的数据处理功能,灵活运用这些功能将会大大提高工作效率。一些研究人员和工程技术人员开始探索利用Excel软件解决工程实际问题[4- 16]。本文结合作者的使用经验,介绍如何使用一些常用的Excel函数命令,实现水平分层累加求和法和垂直分块累加求和法大断面面积计算,可以大大提高工作效率,具有较高的实用价值。
某河道大断面测量数据见表1。打开OFFICE2010版Excel软件,将大断面测量的测点编号、起点距和河底高程数据依次输入到Excel工作簿A、B、C三列中。
水平分层累加求和法适用于对大多数水文测站,这类测站河道横断面地形变化特征一般自中泓线向两岸高程依次递增,河底以上任一高程的水面线与河床左岸和右岸分别只有一个交点。其交点处的起点距可根据相邻两河床测量点起点距及其高程,采用线性内插法求出,右岸交点起点距减去左岸交点起点距就可得到该水位下的水面宽度。相邻两水位水面宽度的平均值乘以水位差就是该层的面积,自河底向上逐层求面积并累加求和至指最高水位以上1.0m水位处,就可得到该水位以下各水位对应的面积。
表1 某水文站大断面测量数据表
在EXCEL中实现水平分层累加求和法水位面积计算,主要用到的函数有:求最小值的函数min()、排序位置查找函数match()、偏移引用区域函数offset()、计数函数count()、线性内插函数forecast()、单元格绝对地址查找函数address( )、文本字符串指定区域数值的引用函数indirect(),各函数的语法和用法可在Excel帮助中查看。
仍以上文中的大断面测量数据为例,说明在EXCEL中如何实现大断面面积计算。在E1单元格中输入公式==MIN($C:$C),用于查找C列中河底高程测量的最小值。在E2单元格中输入公式=MATCH(E1,$C∶C,0)-1,用于确定河床最低高程在高程数值中的排序位置,在该位置以前的地形点序列是降序排列的,称为左岸测量数据;从该位置以后的地形高程点序列是升序排列的,称为右岸测量数据。在E3单元格中输入公式=OFFSET($B$1,$E$2,0),用于获得河床最低点的起点距。在E4单元格中输入公式 =COUNT(B∶B),用于统计C列中高程测点个数。在E5单元格中输入拟定的水位增量值,比如1m。
在F列用于产生水位级系列。F2单元格输入河床最低高程值或略高于河床最低点高程1cm左右,F3单元格输入公式 =F2+$E$5,并将F3单元格中的公式复制粘贴到该列F3单元格以下其他单元格中(可通过将鼠标放到F3单元格并移至该单元格右下角,待鼠标变成黑色小十字型时,向下拖拽若干行完成复制粘贴),就可生成以$E$单元格数值为水位增量的递增的水位序列。
G列用于存放F列中水位与左岸交点的起点距。在G2单元格中输入公式=FORECAST(F2,OFFSET($B$1,MATCH(F2,INDIRECT(ADDRESS(2,3)&":"&ADDRESS($E$2+1,3)),-1),0,2),OFFSET($C$1,MATCH(F2,INDIRECT(ADDRESS(2,3)&":"&ADDRESS($E$2+1,3)),-1),0,2)),该嵌套函数的功能是:在左岸至河底最低点的降序排列的高程数值中,找到大于等于F2单元格中所给水位Z的最小值的排列序号n,分别以$B$1、$C$1为参考,向下偏移n行、0列,以此为起点向下选取高度为2(即两行)的引用数组区域(即Zi和Zi+1两个高程点数据,及其对应的bi和bi+1起点距数据),在引用数组区域内,已知水位用内线性内插法求得交点的起点距。将G2单元格中的公式复制粘贴到该列G2单元格以下其他单元格中,就可生成各水位与左岸交点的起点距。
H列用于存放F列中水位Z与右岸交点的起点距。在H2单元格中输入公式=FORECAST(F2,OFFSET($B$1,$E$2- 1+MATCH(F2,INDIRECT(ADDRESS($E$2+1,3)&":"&ADDRESS($E$4+1,3)),1),0,2),OFFSET($C$1,$E$2- 1+MATCH(F2,INDIRECT(ADDRESS($E$2+1,3)&":"&ADDRESS($E$4+1,3)),1),0,2))该嵌套函数的功能是:在河底最低点至右岸的升序排列的高程数值中,找到小于等于F2单元格中所给水位Z的最小值的排列序号n,分别以$B$1、$C$1为参考,向下偏移n行、0列,得到高度为2(即两行)的引用数组区域(即Zi和Zi+1两个高程点数据,及其对应的Li和Li+1起点距数据),在引用数组区域内由已知水位线性内插法求得交点的起点距。
I列存放各水位下对应的水面宽度。在I2单元格中输入公式=H2-G2,将I2单元格中公式复制粘贴到该列其他单元格中即可完成水面宽度计算任务。
J列存放分层水面面积、K列存放逐层累加后的面积(即各相应水位下的过水断面面积)。因为在在河床最低点的水面面积近似为0,故在J2、K2单元格中都输入0,在J3单元格输入公式=(I3+I2)/2*(F3-F2),并将其复制粘贴到该列J3以下其他单元格中,即可完成水位分层水面面积,在K3单元格输入公式=K2+J3,并将其复制粘贴到该列K3以下其他单元格中,即可完成各水位对应的水面面积计算。
表2 某测站水位面积计算成果表(水平分层累加求和法)
水平分层累加求和法的理论基础是假定相邻两个水位分级之间的面积为梯形,即相邻两个水位分级之间不能有实测河底高程的转折点。当天然河床横断面凸凹不平时,在某些低水位下,水面与河床的交点可能不止两个,而可能是4个或更多(即因水位较低,河道中间某些地方可能会露出水面)。在这种情况下,水平分层累加求和法计算的面积与真实断面面积出入可能会很大。事实上,这也是水平分层法计算面积的弊端,它忽略了河床横断面凸凹变化的事实,将河床横断面地形高程变化简化为从左岸到河底的递减序列和从河底到右岸的递增系列。
要精确计算某一水位下的面积,可采用垂直分块累加求和法。设指定水位为Z,它与河床的交点的起点距为bx;相邻两测点的高程分别为Zi和Zi+1,对应的起点距分别为bi和bi+1;在大断面图上,以上三点的坐标分别为(bx,Z)、(bi,Zi)、(bi+1,Zi+1)。相邻两测点的高程Zi、Zi+1与指定水位Z的关系不外乎四种情况:
(1)Z>Zi且Z>Zi+1,即相邻两测点都位于水面线以上。在这种情况下,两个测点之间不可能有过水断面,即这部分的水面宽为0、过水断面面积为0。
(2)Z (3)Z≤Zi且Z>Zi+1,即水位介于相邻两个测点之间。此时过水断面形状是一个直角三角形,两个直角边长分别为水深(Z-Zi+1)、水面宽(bi+1-bx),其面积为Ai=(bi+1-bx) ×(Z-Zi+1)/2。但此时起点距bx是未知的,因此水面宽(bi+1-bx)也是未知的。在草图上示意性画两个测点(bi,Zi)、(bi+1,Zi+1)的位置关系,并用直线段将其连接起来,点(bx,Z)必然落在(bi,Zi)、(bi+1,Zi+1)的连线上;过点(bi,Zi)、(bx,Z)分别向右引出一条水平线,过点(bi+1,Zi+1)向上引出一条铅垂线与两条水平线的交点分别为M、K,则交点M、K的坐标分别为(bi+1,Z)、(bi+1,Zi),这五个点构成的两个直角三角形是相似的,由相似定理可求出水面宽(bi+1-bx)=(bi+1-bi) ×(Z-Zi+1)/((Zi-Zi+1),从而可求出过水断面面积Ai=[(bi+1-bi) ×(Z-Zi+1)/(Zi-Zi+1)] ×(Z-Zi+1)/2=[(bi+1-bi) ×(Z-Zi+1)2/(Zi-Zi+1)] /2 (4)Z>Zi且Z≤Zi+1,即水位高于左侧地形点,但小于等于右侧地形点高程。此时过水断面形状仍然是直角三角形,过(bi,Zi)向上引出铅垂线,过点(bi+1,Zi+1)、(bx,Z)向左引出水平向,三线的交点和已知的三个点构成两个相似直角三角形,由相似定理可求出水面宽度为(bx-bi)=(bi+1-bi) ×(Z-Zi)/((Zi+1-Zi),过水断面面积Ai=[(bi+1-bi) ×(Z-Zi)/(Zi+1-Zi)] ×(Z-Zi)/2=[(bi+1-bi) ×(Z-Zi)2/(Zi+1-Zi)] /2 自左岸向右岸依次计算各相邻测点过水断面面积Ai并累加求和可完成水面面积计算和水面宽计算。按照这个思路,在EXCEL中使用逻辑判断函数IF()、求最大值函数max()、求最小值函数min()、求和函数sum(),编制相应公式可实现面积计算功能。 仍以表1中的断面测量数据数据为例,插入一张新的工作表,将起点距、河底高程数据复制粘贴到这张表格中A列和B列,要计算C1∶F1单元格区域中水位为6m、8m、10m时的水面面积,并将面积依次存放到单元格区域C2∶F2中。可以在D3单元格中输入公式=IF(D$1<=MIN($B2,$B3),0,IF(D$1>=MAX($B2,$B3),($A3-$A2)*(2*D$1-$B3-$B2)/2,IF(AND(D$1<=$B2,D$1>=$B3),(D$1-$B3)*(D$1-$B3)*($A3-$A2)/2/($B2-$B3),(D$1-$B2)*(D$1-$B2)/($B3-$B2)*($A3-$A2)))),该单元格的功能是通过逻辑判断语句if来判断D$1单元各种的水位与相邻两测点高程$B2、$B3的大小关系,选择相应的面积计算公式来计算在该水位下两测点之间水面面积。将鼠标放到D3单元格,单击鼠标后将鼠标移至单元格右下角,待鼠标变成黑色小十字时,压下鼠标左键并向下拖拽至最后一个高程测点所在行,即可完成水位为6m时的所有相邻测点的过水断面面积计算。将D3单元格中的公式复制粘贴到E3和F3单元格,并向下拖拽直至最后地形测点所在行,即完成E列、F列的单元格公式复制粘贴,得到水位为8m和10m时所有相邻测点的过水断面面积。在C2单元格输入求和公式=SUM(D3∶D200),将公式复制粘贴到E2和F2单元格,可完成三个水位下面积计算。如果想计算更多水位下面积,只需在第一行F列以后输入水位,并将F列F2单元格及其以下单元格公式向右拖拽完成公式的复制粘贴任务即可。 表3 某水文站水位面积计算成果表(垂直分块累加求和法) 水位面积计算是水位测站的一项基本工作,面积计算的准确与否直接影响流速仪测流成果的精确度。人工图上量算水位面积精确度不高,采用软件编程计算面积专业性较强,一般工程计算人员难以掌握。EXCEl软件是目前最常用的办公软件,具有强大的数据处理功能,利用EXCEL内置的函数套用可以实现进行水位面积计算,计算效率高、简单直观,计算过程清晰明了,便于使用者分析和掌握计算原理和计算过程,使用者不需要掌握较强的计算机知识和编程语言即可掌握并快速计算出水位面积,利于推广使用。2 结语