吳立軍
((湖北國土資源職業(yè)學院,湖北 武漢 430090)
基于VBA實現(xiàn)批量提取橫斷面數(shù)據(jù)
吳立軍
((湖北國土資源職業(yè)學院,湖北 武漢 430090)
隨著GPS RTK的普及和使用,野外斷面數(shù)據(jù)采集變得簡便、靈活,為快速實現(xiàn)由野外三維坐標格式到斷面數(shù)據(jù)格式,提出了實現(xiàn)批量提取斷面數(shù)據(jù)的方法及VBA相關(guān)代碼,使內(nèi)業(yè)計算變得簡單而準確。
斷面數(shù)據(jù);VBA;批量提取
由于GPS RTK數(shù)據(jù)采集十分簡便、靈活,所以現(xiàn)在無論是道路建設,還是水利工程,這些要求測量縱橫斷面的地方,在確定精度滿足設計要求的情況下,一般都會選用這一方法來采集斷面數(shù)據(jù)。本文提出了批量提取全線路橫斷面數(shù)據(jù)生成里程文件的實現(xiàn)方法及VBA相關(guān)代碼,即在提取數(shù)據(jù)之前,先繪縱斷面線(線型為“LWPolyline”);根據(jù)項目要求按一定的間距批量繪制橫斷面線,圖層為“dmx”,線型為“Line”;展繪野外采集的數(shù)據(jù),作適當?shù)耐晟浦?運行程序(圖1)。

圖1 操作界面圖Fig.1 Schematic diagram of section points projection
程序結(jié)構(gòu)見圖2所示。

圖2 程序結(jié)構(gòu)圖Fig.2 Structure diagram of program
ThisDrawing.Utility.GetEntity ent,pnt, ‘選擇縱斷面線[1]:
Set SSLn=ThisDrawing.SelectionSets.Add("SSLn") ‘創(chuàng)建一個選擇集
If err Then Set SSLn=ThisDrawing.SelectionSets.Add("SSLn ")
SSLn.Clear
gpCode(0)=-4
dValue(0)=" gpCode(1)=0 dValue(1)="line" ‘橫斷面線為line gpCode(2)=8 dValue(2)="dmx" ‘斷面線圖層為"dmx" gpCode(3)=-4 dValue(3)="AND>" SSLn.Select acSelectionSetAll,,,gpCode,dValue ‘選擇了圖面上所有的橫斷面線 For Each objlin In SSLn Set line1=objlin Intpoints=Ent.IntersectWith(line1,acExtendNone) ‘求斷面線與縱斷面線交點 If UBound(Intpoints)=-1 Then GoTo LinNext ‘判斷是否相交 JDist=ObjCurve.GetDistanceAtPoint(Intpoints) ‘求橫斷面與縱斷面線之交點到縱斷面起點距離,即每條橫斷面對應的里程。 由直線起點、終點坐標及直線的角度,并根據(jù)野外點的離散程度,選擇一個合適的偏移距離OffDist(例如0.5 m)計算出一個矩形選擇框的四個坐標。 OffDist=Val(TextBox6.text) ‘選擇離散程度 例如0.5 m LAng=line1.Angle + 3.1 415 926 / 2 Coord(0)=SP(0)+OffDist * Cos(LAng) Coord(1)=SP(1)+ OffDist * Sin(LAng) Coord(2)=0 Coord(3)=EP(0)+OffDist*Cos(LAng) Coord(4)=EP(1)+ OffDist * Sin(LAng) Coord(5)=0 Coord(6)=EP(0)-OffDist*Cos(LAng) Coord(7)=EP(1)-OffDist*Sin(LAng) Coord(8)=0 Coord(9)=SP(0)-OffDist*Cos(LAng) Coord(10)=SP(1)-OffDist*Sin(LAng) Coord(11)=0 用上述選擇框,結(jié)合下面的選擇條件,選擇每條橫斷面附近(左右偏移0.5 m)的高程塊,形成一個選擇集。 Set SSBk=ThisDrawing.SelectionSets.Add("SSBk ") ‘創(chuàng)建一個選擇集 If err Then Set SSBk=ThisDrawing.SelectionSets.Add("SSBk ") SSBk.Clear ftype(0)=-4 fdata(0)=" ftype(1)=0 fdata(1)="Insert" ‘選擇對象為塊 ftype(2)=8 fdata(2)="GCD" ‘選擇對象圖層為GCD ftype(3)=-4 fdata(3)="AND>" SSBk.SelectByPolygon acSelectionSetCrossingPolygon,Coord,ftype,fdata ‘選擇了斷面線兩側(cè)附近的高程點。 野外采集的數(shù)據(jù)點不一定都在橫斷面線上(圖3),因此在內(nèi)業(yè)處理過程中,將橫斷面線兩側(cè)一定距離(如0.5 m)范圍內(nèi)的點(P1、P2、P3,……)投影到直線上,用垂足(Q1、Q2、Q3,……)坐標計算平距,保證了斷面點平距的準確。 圖3 斷面點投影示意圖Fig.3 Projection schematic diagram of section points 在一定范圍內(nèi),可假定Q1點的高程近似等于P1點的高程(HQ≈HP),用下面這段代碼實現(xiàn)此功能。 For Each Obj In SSBk Set pointXB=Obj Pt(0)=pointXB.insertionPoint(0) ‘高程塊的坐標 Pt(1)=pointXB.insertionPoint(1) ‘高程塊的坐標 Pt(2)=0 ‘高程塊的坐標 Fp(0)=pt(0)+ Cos(LAng+ pi / 2) Fp(1)=pt(1)+ Sin(LAng+ pi / 2) Fp(2)=0 Set Lineobj=ThisDrawing.ModelSpace.AddLine(Pt,Fp) ‘生成一條過高程點且與橫斷面線垂直的直線。 returnPnt=Lineobj.IntersectWith(objline,acExtendThisEntity) ‘求垂足坐標 Qt(0)=returnPnt(0) Qt(1)=returnPnt(1) Qt(2)=pointXB.insertionPoint(2) …… ‘對各斷面點進行排序,生成相應的斷面格式文件。 Next ‘高程點處理循環(huán)體 LinNext: ‘ Next ‘橫斷面線處理循環(huán)體 BEGIN,0∶1 -29.999,38.610 -10.877,37.560 -3.927,36.480 0.000,35.069 4.364,38.710 30.001,39.430 BEGIN,20∶2 -30.000,35.330 -6.069,36.620 0.000,34.180 3.760,35.780 30.000,37.540 BEGIN,40∶3 -30.000,35.110 -5.139,35.390 0.000,34.530 4.490,34.870 30.000,35.700 BEGIN,60∶4 -30.000,36.190 -5.483,35.050 0.000,34.610 5.060,34.920 30.000,34.970 …… 編程后橫斷面數(shù)據(jù)處理變得非常簡單,執(zhí)行程序前用戶需在程序設置對話框中輸入偏移寬度,然后執(zhí)行程序并選擇縱斷面線,等待數(shù)秒鐘后就可生成斷面里程文件,減少了大量手工輸入工作量和計算量,確保了成果的正確。 [1] 張帆,鄭立楷,王華杰 .AutoCAD VBA開發(fā)精彩實例教程[M] .北京:清華大學出版社,2004. (責任編輯:陳文寶) Batch Extraction of Cross-section Data Based on the VBA WU Lijun (HubeiLandResourcesVocationalCollege,Wuhan,Hubei430090) With the popularity and use of total station and GPS RTK,the acquisition of cross-section data has become more simple and flexible. How to simplify the processing of convert the 3D coordinate field data to cross-section data? In this paper,a method and the related VBA scripts has been raised for batch extraction of cross-section data,to do simple and exact computation for the office work. cross-section data; VBA; batch extraction 2016-08-29;改回日期:2016-10-12 吳立軍(1964-),男,副教授,測繪工程專業(yè),從事數(shù)字化成圖的教學和研究。E-mail:394343007@qq.com TB22 B 1671-1211(2016)06-1012-03 10.16536/j.cnki.issn.1671-1211.2016.06.041 數(shù)字出版網(wǎng)址:http://www.cnki.net/kcms/detail/42.1736.X.20161109.1112.018.html 數(shù)字出版日期:2016-11-09 11:12
3 斷面格式文件為CASS格式
4 結(jié)論