基于VBA实现批量提取横断面数据

2016-06-09 08:53吴立军
资源环境与工程 2016年6期
关键词:格式文件纵断面横断面

吴立军

((湖北国土资源职业学院,湖北 武汉 430090)

基于VBA实现批量提取横断面数据

吴立军

((湖北国土资源职业学院,湖北 武汉 430090)

随着GPS RTK的普及和使用,野外断面数据采集变得简便、灵活,为快速实现由野外三维坐标格式到断面数据格式,提出了实现批量提取断面数据的方法及VBA相关代码,使内业计算变得简单而准确。

断面数据;VBA;批量提取

由于GPS RTK数据采集十分简便、灵活,所以现在无论是道路建设,还是水利工程,这些要求测量纵横断面的地方,在确定精度满足设计要求的情况下,一般都会选用这一方法来采集断面数据。本文提出了批量提取全线路横断面数据生成里程文件的实现方法及VBA相关代码,即在提取数据之前,先绘纵断面线(线型为“LWPolyline”);根据项目要求按一定的间距批量绘制横断面线,图层为“dmx”,线型为“Line”;展绘野外采集的数据,作适当的完善之后,运行程序(图1)。

图1 操作界面图Fig.1 Schematic diagram of section points projection

1 程序结构

程序结构见图2所示。

图2 程序结构图Fig.2 Structure diagram of program

2 源程序

ThisDrawing.Utility.GetEntity ent,pnt, ‘选择纵断面线[1]:

Set SSLn=ThisDrawing.SelectionSets.Add("SSLn") ‘创建一个选择集

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) ‘求横断面与纵断面线之交点到纵断面起点距离,即每条横断面对应的里程。

由直线起点、终点坐标及直线的角度,并根据野外点的离散程度,选择一个合适的偏移距离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

用上述选择框,结合下面的选择条件,选择每条横断面附近(左右偏移0.5 m)的高程块,形成一个选择集。

Set SSBk=ThisDrawing.SelectionSets.Add("SSBk ") ‘创建一个选择集

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 ‘选择了断面线两侧附近的高程点。

野外采集的数据点不一定都在横断面线上(图3),因此在内业处理过程中,将横断面线两侧一定距离(如0.5 m)范围内的点(P1、P2、P3,……)投影到直线上,用垂足(Q1、Q2、Q3,……)坐标计算平距,保证了断面点平距的准确。

图3 断面点投影示意图Fig.3 Projection schematic diagram of section points

在一定范围内,可假定Q1点的高程近似等于P1点的高程(HQ≈HP),用下面这段代码实现此功能。

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 ‘高程点处理循环体

LinNext: ‘

Next ‘横断面线处理循环体

3 断面格式文件为CASS格式

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

……

4 结论

编程后横断面数据处理变得非常简单,执行程序前用户需在程序设置对话框中输入偏移宽度,然后执行程序并选择纵断面线,等待数秒钟后就可生成断面里程文件,减少了大量手工输入工作量和计算量,确保了成果的正确。

[1] 张帆,郑立楷,王华杰 .AutoCAD VBA开发精彩实例教程[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-),男,副教授,测绘工程专业,从事数字化成图的教学和研究。E-mail:394343007@qq.com

TB22

B

1671-1211(2016)06-1012-03

10.16536/j.cnki.issn.1671-1211.2016.06.041

数字出版网址:http://www.cnki.net/kcms/detail/42.1736.X.20161109.1112.018.html 数字出版日期:2016-11-09 11:12

猜你喜欢
格式文件纵断面横断面
基于WebGL的轨道交通BIM轻量化应用方案
关于RAW格式文件,我们需要知道些什么?
相机学院
相机学院
保证公路横断面设计正确性的方法研究与应用
100km/h线路节能坡纵断面设计研究
普速铁路轨道大修中平纵面的施工控制
广州市健康体检人群种植修复情况的横断面研究
2014年某院医院感染横断面调查
中医院医院感染横断面调查分析