任晓东 唐晓春 颜小华
VB.NET在遥测水位数据生成一潮推流数据文件中的应用
任晓东 唐晓春 颜小华
随着江苏水利现代化及科技的发展,大部分水文测站水位开始采用遥测方式记录,如何从遥测数据文件中快速、准确地获取资料整编的数据是一个问题。目前,苏州沿江各站采用一潮推流法的测站,计算引排水量所需的原始数据文件,还没有程序能从遥测数据文件中自动获取。通过实践发现,将遥测水位生成类似自记水位纸形式的CAD图形,然后在图形上画出每潮引排水图形,最后通过编程的方法获取推流所需数据不失为一个简单快速的方法。
这个过程分两步进行:一是将遥测数据库中导出的CSV文件转成“浙江局1”的数据格式;二是将“浙江局1”的数据文件生成CAD图形。
1.遥测数据转换成“浙江局1”数据格式
从遥测数据库导出的数据文件一般是以逗号分隔的CSV文件,数据格式如图1所示。
图1 遥测数据格式
根据南方片水文资料整编系统中“水位雨量固存数据转换”模块所列水位数据类型,选择“浙江局1”数据格式为目标数据格式,通过VB.NET编程转换后的数据如图2所示。
图2 “浙江局1”数据格式
数据格式转换完成后,将缺少的数据补全,为下一步的CAD成图作准备。
2.CAD成图
为了同自记纸摘录习惯保持一致,成图时,将时间数据按一定比例转成10进制数表示,水位不作转换,直接采用。在默认图层生成CAD图形后,添加图层“1”,推流数据线就在图层“1”中用多段线勾画,成图部分代码如下所示。
End If
End If
Next
acLayer=AcadApp.ActiveDocum -ent.Layers.Item(0)
AcadApp.ActiveDocument.Active -Layer=acLayer
AcadApp.ActiveDocument.Active -Linetype=AcadApp.ActiveDocument. Linetypes.Item("ByLayer")
AcadPl=objModelSpace.AddLight -WeightPolyline(Pt)
acLayer=AcadApp.ActiveDocu -ment.Layers.Add("1")'添加图层
AcadApp.ActiveDocument.Active -Layer=acLayer
AcadApp.ZoomExtents()'显示整个图形
在图层“1”勾画的多段线推流数据线如图3所示。
图3 推流数据文件图形
图4 提取的一潮推流数据文件
提取数据时,首先采用AUTOCAD过滤组码与组码值创建选择集,过滤组码与组码值可以通过命令(entget(car(entsel)))获取的对象基本特性,例如:
((-1.<图元名:7ef83b28>)(0. "LWPOLYLINE")(330.<图元名:7ef81 -cc0>)(5."425")(100."AcDbEntity")(67.0)(410."Model")(8."JZD")(6. "Continuous")
其中比较常用的(0."LWPOLYL -INE")表示对象类型;(8."JZD")表示对象所在层所以还可以扩展或收缩过滤器,示例如下:
BuildFilter pType, pData,0,"LWPOLYLINE":建立图上所有的多段线过滤器;
BuildFilterpType,pData,0,"LWPOLYLINE",8,"JZD":建立图层是JZD的多段线过滤器;
BuildFilterpType,pData,0,"LWPOLYLINE",8,"JZD",62,3:建立图层是JZD、颜色为绿色的多段线过滤器。
根据所绘图形的特点,创建过滤器代码为:
BuildFilter(pType,pData,0,"LWPOLYLINE",8,"1")
然后根据过滤条件,选取符合条件的实体对象,加入到选择集中。创建选择集代码为
sset=CreateSelectionSet()
sset.Clear()
sset.Select(Common.AcSelect.acSelec -tionSetAll,,,pType,pData)
最后遍历选择集,获取“开闸时间、关闸时间、开闸稳定水位、高(低)潮水位”数据,遍历选择集部分代码如下所示,生成的一潮推流数据文件如图4所示。
strData=sset(k).coordinates
For ii=0 To UBound(strData)-1 Step 2
Xcor=Round(Val(strData(ii)),4)'时间
Ifii=0 Then
strStartT=Replace(cc.GetMonthDay -HourMinute(iYear,Xcor,iFlag),"","")'开始时间
strStartWL=Round(Val(strData(ii+ 1)),2)'开闸稳定水位
ElseIfii=UBound(strData)-3 Then
strEndWL=Round(Val(strData(ii+ 1)),2)'高低水位
ElseIfii=UBound(strData)-1 Then
strEndT=Replace(cc.GetMonthDay -HourMinute(iYear,Xcor,iFlag),"","")'结束时间
If JudgeHour(strStartT,strEndT)Then
WT.WriteLine(strStartT&Chr(9)& strEndT&Chr(9)&strStartWL&Chr(9)&strEndWL)
End If
End If
Next
本文主要介绍了如何将遥测水位数据转换成CAD图形,然后在图上画出引排水图形,最后从画的图形中提取一潮推流数据方法。实践证明,该方法切实可行,实用性强,在保证自记纸摘录习惯的同时,大大提高了工作效率和摘录数据的准确性,为采用一潮推流法计算引排水量的水文站提供了一种简便摘录数据的方法。本程序已在VB.NET2010及AUTOCAD2010中测试通过■
(作者单位:江苏省水文水资源勘测局苏州分局 215006)
(专栏编辑:张 婷)