测量方位角计算公式VB源代码.docx

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

测量方位角计算公式VB源代码.docx

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

测量方位角计算公式VB源代码.docx

测量方位角计算公式VB源代码

测量方位角计算公式VB源代码

角度化弧度

PublicFunctionRadian(aAsDouble)AsDouble

 DimRaAsDouble

 DimcAsDouble

 DimFSAsDouble

 DimIbAsInteger

 DimIcAsInteger

 Ra=pi/180#

 Ib=Int(a)

 c=(a-Ib)*100#

 Ic=Int(c)

 FS=(c-Ic)*100#

 Radian=(Ib+Ic/60#+FS/3600#)*Ra

EndFunction

'弧度化角度

PublicFunctionDegree(aAsDouble)AsDouble

 DimBAsDouble

 DimFs1AsDouble

 DimIm1AsInteger

 DimId1AsInteger

 B=a

 CallDMS(B,Id1,Im1,Fs1)

 Degree=Id1+Im1/100#+Fs1/10000#

EndFunction

PublicSubDMS(aAsDouble,IDAsInteger,IMAsInteger,FSAsDouble)

 DimBAsDouble

 DimcAsDouble

 c=a

 c=180#/pi*c

 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>0Then

     azimuth=0

   Else

     azimuth=180

   EndIf

 EndIf

EndFunction

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点

L2点

第二缓和曲线

HZ点

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<=0Then

  αab=3.141592654+αab

 Else

 αab=2*3.141592654-αab

EndIf

EndFunction

α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)

Print#1,"K+";li;"中 桩",Left(Xi,10),Left(Yi,10) '保存为TXT格式文档

Print#1,"K+";li;"右边桩",Left(xir,10),Left(yir,10)

Print#1,

Close#1

Open"C:

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

Print#1,,"K+"&li;",,";Left(xil,10);",";Left(yil,10);",";0

Print#1,,"K+"&li;",,";Left(Yi,10);",";Left(Xi,10);",";0 '保存DAT格式文档

Print#1,,"K+"&li;",,";Left(xir,10);",";Left(yir,10);",";0

Print#1,

Close#1

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

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

在编写程序的时候,成果保存的关键词有Append,Output等,在第一次保存时用Output,目的是清除以前的旧项目数据;在同一段曲线以后计算保存中用Append,目的是在前面基础上继续添加数据,使原来的数据不被替代。

Open"C:

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

DoWhileNotEOF

(1)                         '文本框显示计算的数据

LineInput#1,inputdata

Text5.Text=Text5.Text+inputdata+vbCrLf

Loop

Close#1

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("autocad.application")

  IfErrThen

     Err.Clear

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

",vbOKCancel,"警告!

"

     ExitSub

     EndIf

EndIf

appcad.Visible=True                  'CAD显示

SetacadDoc=appcad.ActiveDocument

Setmospace=acadDoc.ModelSpace

Dimstp(0To2)AsDouble

Dimetp(0To2)AsDouble

DimfnameAsString

fname="C:

\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)

Loop

Close#1

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

f=(a-b)/a

c=a^2/b

d=b^2/a

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)

EndIf

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#

EndSub

'高斯反算

PrivateSubDadiFs()

DimtAsDouble,ItpAsDouble,X0AsDouble,BfAsDouble,NAsDouble

DimvAsDouble,llAsDouble,WAsDouble,MAsDouble,L0AsDouble

L0=Radian(Lo)

X0=x*0.000001

y=y-500000#

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

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

EndIf

Else

a=6378140'75椭球参数

b=6356755.28815753

ep=0.006694384999588

ep1=0.006739501819473

f=(a-b)/a

c=a^2/b

d=b^2/a

IfX0<3Then

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

ElseIfX0<6Then

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

EndIf

EndIf

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

N=a/W

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)

r=Degree(r)

EndSub

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

用到的子程序:

PublicConstPi=3.14159265358979,p=206264.806

PublicCktqAsString

'角度化弧度

PublicFunctionRadian(aAsDouble)AsDouble

DimRoAsDouble

DimcAsDouble

DimFsAsDouble

DimIbAsInteger

DimIcAsInteger

Ifa<0Thena=-a:

t=1

Ro=Pi/180#

Ib

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

当前位置:首页 > 成人教育 > 成考

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

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