测量方位角计算公式VB源代码Word文档格式.docx

上传人:b****6 文档编号:21680442 上传时间:2023-01-31 格式:DOCX 页数:11 大小:19.83KB
下载 相关 举报
测量方位角计算公式VB源代码Word文档格式.docx_第1页
第1页 / 共11页
测量方位角计算公式VB源代码Word文档格式.docx_第2页
第2页 / 共11页
测量方位角计算公式VB源代码Word文档格式.docx_第3页
第3页 / 共11页
测量方位角计算公式VB源代码Word文档格式.docx_第4页
第4页 / 共11页
测量方位角计算公式VB源代码Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

测量方位角计算公式VB源代码Word文档格式.docx

《测量方位角计算公式VB源代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《测量方位角计算公式VB源代码Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

测量方位角计算公式VB源代码Word文档格式.docx

ID=Int(c+0.0000005)

B=(c-ID)*60+0.0005

IM=Int(B)

FS=(B-IM)*60

EndSub

计算两点间的方位角

PublicFunctionazimuth(x1AsDouble,y1AsDouble,x2AsDouble,y2AsDouble)AsSingle

DimdxAsDouble

DimdyAsDouble

DimfwjAsDouble

dx=x2-x1

dy=y2-y1

Ifdy<

>

0Then

fwj=pi*(1-Sgn(dy)/2)-Atn(dx/dy)

azimuth=Degree(fwj)

Else

Ifdx>

azimuth=0

azimuth=180

EndIf

5.2程序字母代表含义

La—起点里程,R—圆曲线半径,l0—两端缓和曲线长,α—曲线转向角,T—切线长,L—曲线长,E0—外矢距,q—切曲差,cc—线路转向(cc=1时,线路向右转;

cc=-1时,线路向左转),d―桩距,m―边桩距,Li―i点的里程,ZH―直缓点,HY―缓圆点,JD―交点,QZ―曲中点,YZ―圆直点,YH―圆缓点,HZ―缓直点,LJD—交点里程,LZH―直缓点里程,LHY―缓圆点里程,LQZ―曲中点里程,LYH―圆缓点里程,LHZ―缓直点里程。

5.3程序设计思路及具体程序的编写

程序的基本构思:

本程序利用已知直、曲线要素、交点坐标,计算出曲线上逐桩坐标,根据逐桩坐标就可实地放样。

此程序在不同测站测设同一曲线时,调用程序只需改变测站和后视点坐标即可。

不过测站点和后视点的坐标系统与逐桩坐标系统必须一致。

程序设计中主要发现的问题及解决办法:

5.3.1起点为非整桩的情况

本程序采用将非整桩起点的坐标通过变换成为整桩的方法。

直线起点 

L1=Int((la/10)*10+k)

第一缓和曲线L2=Int(Ljd–T+K)

圆曲线 

L3=Int(Ljd-T+lo+K)

第二缓和曲线L4=Int(Ljd-T+L–lo+K)

并计算出这些点的坐标。

表5.1起点是否整桩的判断

线型

整桩起算点

非整桩起算点

直线

起终点(两端曲线的端点)

L1点

第一缓和曲线

ZH点

L2点

圆曲线

ZH(带缓和曲线)或ZY点

第二缓和曲线

HZ点

5.3.2路线方位角的计算

程序中采用的起算数据中不包含方位角一项,因此必须要由已知的两点坐标计算出线路的方位角。

本程序中利用ZH点和JD的坐标计算。

建立一个计算方位角的模块:

Functionαab#(Xa#,Ya#,Xb#,Yb#)

αab=Atn(Abs(Yb-Ya)/Abs(Xb-Xa))

IfYb-Ya>

=0AndXb-Xa>

=0Then

αab=αab

ElseIfYb-Ya>

0AndXb-Xa<

0Then 

αab=3.141592654-αab

ElseIfYb-Ya<

=0AndXb-Xa<

αab=3.141592654+αab

αab=2*3.141592654-αab

EndIf

αab——某点的方位角,Xa——起点X坐标(ZH或ZY点坐标),Ya——起点Y坐标(ZH或ZY点坐标),Xb——终点X坐标(JD的X坐标),Yb——终点Y坐标(JD的Y坐标)

5.3.3计算曲线边桩坐标的程序

Xi=x0+Xxi*Cos(A0)-cc*Yyi*Sin(A0) 

'

i点的X坐标

Yi=y0+Xxi*Sin(A0)+cc*Yyi*Cos(A0) 

i点的Y坐标

Ai=A0+cc*β

Xz=Xi+m*Cos(Ai-3.141592654/2) 

左边桩X坐标

Yz=Yi+m*Sin(Ai-3.141592654/2) 

左边桩Y坐标

Xy=Xi+m*Cos(Ai+3.141592654/2) 

右边桩X坐标

Yy=Yi+m*Sin(Ai+3.141592654/2) 

右边桩Y坐标

A0计算参考起点的方位角,Ai为计算点的方位角,m为边桩距,Xi为计算点的X坐标,Yi为计算点的Y坐标,cc为转向(左转-1,右转+1),β=li^2/(2*r*lo)。

5.3.4计算数据的保存与显示

Open"

C:

\DocumentsandSettings\Administrator\桌面\道路放样\计算结果\直线.txt"

ForAppendAs#1 

打开文件进行写操作并保存

Print#1,"

K+"

;

li;

"

左边桩"

Left(xil,10),Left(yil,10)

中 

桩"

Left(Xi,10),Left(Yi,10) 

保存为TXT格式文档

右边桩"

Left(xir,10),Left(yir,10)

Print#1,

Close#1

\DocumentsandSettings\Administrator\桌面\道路放样\计算结果\直线.dat"

ForAppendAs#1

Print#1,,"

&

,"

Left(xil,10);

"

Left(yil,10);

"

0

Left(Yi,10);

Left(Xi,10);

保存DAT格式文档

Left(xir,10);

Left(yir,10);

“K+”表示桩号,li表示里程,xi,yi,xil,yil,xir,yir分别表示计算点的中边桩坐标。

Left()表示取计算成果的钱10位有效数字。

在编写程序的时候,成果保存的关键词有Append,Output等,在第一次保存时用Output,目的是清除以前的旧项目数据;

在同一段曲线以后计算保存中用Append,目的是在前面基础上继续添加数据,使原来的数据不被替代。

\DocumentsandSettings\Administrator\桌面\道路放样\计算结果\第一缓和曲线.txt"

ForInputAs#1

DoWhileNotEOF

(1) 

 

文本框显示计算的数据

LineInput#1,inputdata

Text5.Text=Text5.Text+inputdata+vbCrLf

Loop

5.3.5引用CAD成图的方法

将计算结果输入到【成图数据】文件中,采用【X,Y,Z】的格式一行一行的存储在TXT文本文档中,此时Z为0。

首先引用“AutoCAD2000ObjectLibrary”,然后输入以下语句:

DimappcadAsObject 

建立Application对象

DimacadDocAsObject 

建立Document对象

DimmospaceAsObject 

建立ModelSpace对象

Setappcad=CreateObject("

autocad.application"

IfErrThen

Err.Clear 

调用CAD

OnErrorResumeNext 

容错

Setappcad=CreateObject("

IfErrThen

Err.Clear

MsgBox"

不能运行AutoCAD,请检查是否安装!

"

vbOKCancel,"

警告!

ExitSub

appcad.Visible=True 

CAD显示

SetacadDoc=appcad.ActiveDocument

Setmospace=acadDoc.ModelSpace

Dimstp(0To2)AsDouble

Dimetp(0To2)AsDouble

DimfnameAsString

fname="

\DocumentsandSettings\Administrator\桌面\道路放样\成图数据\直线中.txt"

CAD成图

OpenfnameForInputAs#1 

打开数据文件

Input#1,stp(0),stp

(1),stp

(2)

DoWhileNotEOF

(1)

Input#1,etp(0),etp

(1),etp

(2)

Callmospace.AddLine(stp,etp)

stp(0)=etp(0)

stp

(1)=etp

(1)

stp

(2)=etp

(2)

5.3.6计算的数据输出到全站仪的格式问题

软件结合公路放样的实例编制,根据实际工作需要,采用手工输入。

程序输出采用TXT文挡和DAT文档。

TXT文档便于进行打印查询及检查。

DAT文档易于将数据传输到全站仪直接进行方放样工作。

除此以外,DAT格式的文档还可直接导入到AUTOCAD中进行道路的成图,完成各种动态报表的绘制与输出。

经过学习经验和对仪器的考察,DAT文件的格式在本程序采用“点名,编码,Y,X,Z”的格式输出。

反算->

正算后,Y坐标与原来的差了0.5-0.7mm,不知道怎么回事,这两年工作忙也没有时间再深究,但是这样的计算精度做控制足够了,如果楼主或是者是哪位同仁见此贴能顺便把这个问题解决了,咱们就一起进步了!

代码如下:

高斯坐标正算

PrivateSubDadiZs()

DimtAsDouble,ItpAsDouble,X0AsDouble,NAsDouble,L0AsDouble

DimVAsDouble,llAsDouble,WAsDouble,MAsDouble

Lat=Radian(Lat)

Lon=Radian(Lon)

L0=Radian(Lo)

IfTq=0Then

a=6378245'

54椭球参数

b=6356863.01877305

ep=0.006693421622966

ep1=0.006738525414683

f=(a-b)/a

c=a^2/b

d=b^2/a

X0=111134.8611*(Lat*180#/Pi)-(32005.7799*Sin(Lat)+133.9238*(Sin(Lat))^3+0.6973*(Sin(Lat))^5+0.0039*(Sin(Lat))^7)*Cos(Lat)

X0=111134.8611*(Lat*180#/Pi)-(32005.7798*Sin(Lat)+133.9238*(Sin(Lat))^3+0.6972*(Sin(Lat))^5+0.0039*(Sin(Lat))^7)*Cos(Lat)

Else

a=6378140'

75椭球参数

b=6356755.28815753

ep=0.006694384999588

ep1=0.006739501819473

X0=111133.0047*(Lat*180/Pi)-(32009.8575*Sin(Lat)+133.9602*(Sin(Lat))^3+0.6976*(Sin(Lat))^5+0.0039*(Sin(Lat))^7)*Cos(Lat)

ll=Lon-L0

t=Tan(Lat)

Itp=ep1*Cos(Lat)^2

W=Sqr(1-ep*Sin(Lat)^2)

V=Sqr(1+ep1*Cos(Lat)^2)

M=c/V^3

N=a/W

x=X0+N*t*(Cos(Lat))^2*ll^2/2+N*t*(5-t*t+9*Itp+4*Itp*Itp)*(Cos(Lat))^4*ll^4/24+N*t*(61-58*t^2+t^4+270*Itp-330*t^2*Itp)*(Cos(Lat))^6*ll^6/720+N*t*(1385-3111*t^2+543*t^4-t^6)*Cos(Lat)^8*ll^8/40320

x=X0+N*t*(Cos(Lat))^2*ll^2/2+N*t*(5-t*t+9*Itp^2+4*Itp^4)*(Cos(Lat))^4*ll^4/24+N*t*(61-58*t^2+t^4+270*Itp^2-330*t^2*Itp^2)*(Cos(Lat))^6*ll^6/720+N*t*(1385-3111*t^2+543*t^4-t^6)*Cos(Lat)^8*ll^8/40320

y=N*Cos(Lat)*ll+N*(1-t*t+Itp)*(Cos(Lat))^3*ll^3/6+N*(5-18*t*t+t^4+14*Itp-58*Itp*t*t)*(Cos(Lat))^5*ll^5/120+N*(61-479*t^2+179*t^4-t^6)*Cos(Lat)^7*ll^7/5040

r=Sin(Lat)*ll+Sin(Lat)*(Cos(Lat))^2*ll^3*(1+3*Itp+2*Itp^2)/3+Sin(Lat)*(Cos(Lat))^4*ll^5*(2-t*t)/15

r=Degree(r)

y=y+500000#

高斯反算

PrivateSubDadiFs()

DimtAsDouble,ItpAsDouble,X0AsDouble,BfAsDouble,NAsDouble

DimvAsDouble,llAsDouble,WAsDouble,MAsDouble,L0AsDouble

X0=x*0.000001

y=y-500000#

IfX0<

3Then

Bf=9.04353301294*X0-0.00000049604*X0^2-0.00075310733*X0^3-0.00000084307*X0^4-0.00000426055*X0^5-0.00000010148*X0^6

ElseIfX0<

6Then

Bf=27.11115372595+9.02468257083*(X0-3)-0.00579740442*(X0-3)^2-0.00043532572*(X0-3)^3+0.00004857285*(X0-3)^4+0.00000215727*(X0-3)^5-0.00000019399*(X0-3)^6

Bf=9.04369066313*X0-0.00000049618*X0^2-0.00075325505*X0^3-0.0000008433*X0^4-0.00000426157*X0^5-0.0000001015*X0^6

Bf=27.11162289465+9.02483657729*(X0-3)-0.00579850656*(X0-3)^2-0.00043540029*(X0-3)^3+0.00004858357*(X0-3)^4+0.00000215769*(X0-3)^5-0.00000019404*(X0-3)^6

Bf=Bf*Pi/180#

t=Tan(Bf)

Itp=ep1*Cos(Bf)^2

W=Sqr(1-ep*Sin(Bf)^2)

v=Sqr(1+ep1*Cos(Bf)^2)

M=c/v^3

Lat=Bf-0.5*v^2*t*((y/N)^2-(5+3*t*t+Itp-9*Itp*t*t)*(y/N)^4/12+(61+90*t*t+45*t^4)*(y/N)^6/360)

ll=((y/N)-(1+2*t*t+Itp)*(y/N)^3/6+(5+28*t*t+24*t^4+6*Itp+8*Itp*t*t)*(y/N)^5/120)/Cos(Bf)

r=y*t/N-y^3*t*(1+t*t-Itp)/(3*N^3)+y^5*t*(2+5*t*t+3*t^4)/(15*N^5)

Lat=Degree(Lat)

Lon=Degree(L0+ll)

有了正反算,换带也就完成了!

用到的子程序:

PublicConstPi=3.14159265358979,p=206264.806

PublicCktqAsString

DimRoAsDouble

DimFsAsDouble

Ifa<

0Thena=-a:

t=1

Ro=Pi/180#

Ib

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1