任曉東 唐曉春 顏小華
VB.NET在遙測水位數(shù)據(jù)生成一潮推流數(shù)據(jù)文件中的應(yīng)用
任曉東 唐曉春 顏小華
隨著江蘇水利現(xiàn)代化及科技的發(fā)展,大部分水文測站水位開始采用遙測方式記錄,如何從遙測數(shù)據(jù)文件中快速、準確地獲取資料整編的數(shù)據(jù)是一個問題。目前,蘇州沿江各站采用一潮推流法的測站,計算引排水量所需的原始數(shù)據(jù)文件,還沒有程序能從遙測數(shù)據(jù)文件中自動獲取。通過實踐發(fā)現(xiàn),將遙測水位生成類似自記水位紙形式的CAD圖形,然后在圖形上畫出每潮引排水圖形,最后通過編程的方法獲取推流所需數(shù)據(jù)不失為一個簡單快速的方法。
這個過程分兩步進行:一是將遙測數(shù)據(jù)庫中導(dǎo)出的CSV文件轉(zhuǎn)成“浙江局1”的數(shù)據(jù)格式;二是將“浙江局1”的數(shù)據(jù)文件生成CAD圖形。
1.遙測數(shù)據(jù)轉(zhuǎn)換成“浙江局1”數(shù)據(jù)格式
從遙測數(shù)據(jù)庫導(dǎo)出的數(shù)據(jù)文件一般是以逗號分隔的CSV文件,數(shù)據(jù)格式如圖1所示。
圖1 遙測數(shù)據(jù)格式
根據(jù)南方片水文資料整編系統(tǒng)中“水位雨量固存數(shù)據(jù)轉(zhuǎn)換”模塊所列水位數(shù)據(jù)類型,選擇“浙江局1”數(shù)據(jù)格式為目標數(shù)據(jù)格式,通過VB.NET編程轉(zhuǎn)換后的數(shù)據(jù)如圖2所示。
圖2 “浙江局1”數(shù)據(jù)格式
數(shù)據(jù)格式轉(zhuǎn)換完成后,將缺少的數(shù)據(jù)補全,為下一步的CAD成圖作準備。
2.CAD成圖
為了同自記紙摘錄習(xí)慣保持一致,成圖時,將時間數(shù)據(jù)按一定比例轉(zhuǎn)成10進制數(shù)表示,水位不作轉(zhuǎn)換,直接采用。在默認圖層生成CAD圖形后,添加圖層“1”,推流數(shù)據(jù)線就在圖層“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”勾畫的多段線推流數(shù)據(jù)線如圖3所示。
圖3 推流數(shù)據(jù)文件圖形
圖4 提取的一潮推流數(shù)據(jù)文件
提取數(shù)據(jù)時,首先采用AUTOCAD過濾組碼與組碼值創(chuàng)建選擇集,過濾組碼與組碼值可以通過命令(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、顏色為綠色的多段線過濾器。
根據(jù)所繪圖形的特點,創(chuàng)建過濾器代碼為:
BuildFilter(pType,pData,0,"LWPOLYLINE",8,"1")
然后根據(jù)過濾條件,選取符合條件的實體對象,加入到選擇集中。創(chuàng)建選擇集代碼為
sset=CreateSelectionSet()
sset.Clear()
sset.Select(Common.AcSelect.acSelec -tionSetAll,,,pType,pData)
最后遍歷選擇集,獲取“開閘時間、關(guān)閘時間、開閘穩(wěn)定水位、高(低)潮水位”數(shù)據(jù),遍歷選擇集部分代碼如下所示,生成的一潮推流數(shù)據(jù)文件如圖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)'開閘穩(wěn)定水位
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),"","")'結(jié)束時間
If JudgeHour(strStartT,strEndT)Then
WT.WriteLine(strStartT&Chr(9)& strEndT&Chr(9)&strStartWL&Chr(9)&strEndWL)
End If
End If
Next
本文主要介紹了如何將遙測水位數(shù)據(jù)轉(zhuǎn)換成CAD圖形,然后在圖上畫出引排水圖形,最后從畫的圖形中提取一潮推流數(shù)據(jù)方法。實踐證明,該方法切實可行,實用性強,在保證自記紙摘錄習(xí)慣的同時,大大提高了工作效率和摘錄數(shù)據(jù)的準確性,為采用一潮推流法計算引排水量的水文站提供了一種簡便摘錄數(shù)據(jù)的方法。本程序已在VB.NET2010及AUTOCAD2010中測試通過■
(作者單位:江蘇省水文水資源勘測局蘇州分局 215006)
(專欄編輯:張 婷)