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

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

举报
开通vip

测量方位角计算公式VB源代码测量方位角计算公式VB源代码 角度化弧度 Public Function Radian(a As Double) As Double Dim Ra As Double Dim c As Double Dim FS As Double Dim Ib As Integer Dim Ic As Integer Ra = pi / 180# Ib = Int(a) c = (a - Ib) * 100# Ic = Int(c) FS = (c - Ic) * 100# Radian = (Ib +...

测量方位角计算公式VB源代码
测量方位角计算公式VB源代码 角度化弧度 Public Function Radian(a As Double) As Double Dim Ra As Double Dim c As Double Dim FS As Double Dim Ib As Integer Dim Ic As Integer Ra = pi / 180# Ib = Int(a) c = (a - Ib) * 100# Ic = Int(c) FS = (c - Ic) * 100# Radian = (Ib + Ic / 60# + FS / 3600#) * Ra End Function ‘弧度化角度 Public Function Degree(a As Double) As Double Dim B As Double Dim Fs1 As Double Dim Im1 As Integer Dim Id1 As Integer B = a Call DMS(B, Id1, Im1, Fs1) Degree = Id1 + Im1 / 100# + Fs1 / 10000# End Function Public Sub DMS(a As Double, ID As Integer, IM As Integer, FS As Double) Dim B As Double Dim c As Double c = a c = 180# / pi * c ID = Int(c + 0.0000005) B = (c - ID) * 60 + 0.0005 IM = Int(B) FS = (B - IM) * 60 End Sub ‘计算两点间的方位角 Public Function azimuth(x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Single Dim dx As Double Dim dy As Double Dim fwj As Double dx = x2 - x1 dy = y2 - y1 If dy <> 0 Then fwj = pi * (1 - Sgn(dy) / 2) - Atn(dx / dy) azimuth = Degree(fwj) Else If dx > 0 Then azimuth = 0 Else azimuth = 180 End If End If End Function 5.2程序字母代表含义 La—起点里程, R—圆曲线半径,l0—两端缓和曲线长,α—曲线转向角,T—切线长,L—曲线长,E0—外矢距,q—切曲差,cc—线路转向(cc=1时,线路向右转;cc=-1时,线路向左转),d―桩距,m―边桩距,Li―i点的里程,ZH― QZ―曲中点,YZ―圆直点,YH―圆缓点,直缓点,HY―缓圆点,JD―交点, 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 起点是否整桩的判断 5.3.2 路线方位角的计算 程序中采用的起算数据中不包含方位角一项,因此必须要由已知的两点坐标计 算出线路的方位角。 本程序中利用ZH点和JD的坐标计算。建立一个计算方位角的模块: Function αab#(Xa#, Ya#, Xb#, Yb#) αab = Atn(Abs(Yb - Ya) / Abs(Xb - Xa)) If Yb - Ya >= 0 And Xb - Xa >= 0 Then αab = αab ElseIf Yb - Ya > 0 And Xb - Xa < 0 Then αab = 3.141592654 - αab ElseIf Yb - Ya <= 0 And Xb - Xa <= 0 Then αab = 3.141592654 + αab Else αab αab = 2 * 3.141592654 - End If End Function αab——某点的方位角,Xa ——起点X坐标(ZH或ZY点坐标),Ya——起点 Y坐标(ZH或ZY点坐标), 终点X坐标(JD的X坐标),Yb——终点Y坐标(JD的Y坐标) Xb—— 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为计算点 的;, Left(xil, 10), Left(yil, 10) Print #1, "K+"; li; "中 桩", Left(Xi, 10), Left(Yi, 10) ‘保存为TXT 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 文档 Print #1, "K+"; li; "右边桩", Left(xir, 10), Left(yir, 10) Print #1, Close #1 Open "C:\Documents and Settings\Administrator\桌面\道路放样\计算结果\ 直线.dat" For Append As #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:\Documents and Settings\Administrator\桌面\道路放样\计算结果\第一缓和曲线.txt" For Input As #1 Do While Not EOF(1) ‘文本框显示计算的数据 Line Input #1, inputdata Text5.Text = Text5.Text + inputdata + vbCrLf Loop Close #1 5.3.5 引用CAD成图的方法 将计算结果输入到【成图数据】文件中,采用【X,Y,Z】的格式一行一行的存储在TXT文 首先引用―AutoCAD 2000 Object Library‖,然后输入以下语句: Dim appcad As Object ‘建立Application对象 Dim acadDoc As Object ‘建立Document对象 Dim mospace As Object ‘建立Model Space对象 Set appcad = CreateObject("autocad.application") If Err Then Err.Clear ‘调用CAD On Error Resume Next ‘容错 Set appcad = CreateObject("autocad.application") If Err Then Err.Clear MsgBox "不能运行AutoCAD,请检查是否安装~", vbOKCancel, "警告~" Exit Sub End If End If appcad.Visible = True ‘CAD显示 Set acadDoc = appcad.ActiveDocument Set mospace = acadDoc.ModelSpace Dim stp(0 To 2) As Double Dim etp(0 To 2) As Double Dim fname As String fname = "C:\Documents and Settings\Administrator\桌面\道路放样\成图数据\直线 中.txt" ‘CAD成图 Open fname For Input As #1 ‘打开数据文件 Input #1, stp(0), stp(1), stp(2) Do While Not EOF(1) Input #1, etp(0), etp(1), etp(2) Call mospace.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,不知道怎么回事,这两年工作忙也没有时间再深究,但是这样的计算精度做控制足够了,如果楼主或是者是哪位同仁见此贴能顺便把这个问题解决了,咱们就一起进步了~代码如下: ‘高斯坐标正算 Private Sub DadiZs() Dim t As Double, Itp As Double, X0 As Double, N As Double, L0 As Double Dim V As Double, ll As Double, W As Double, M As Double Lat = Radian(Lat) Lon = Radian(Lon) L0 = Radian(Lo) If Tq = 0 Then a = 6378245 ‘54椭球参数 b = 6356863.01877305 ep = 0 ‘高斯反算 Private Sub DadiFs() Dim t As Double, Itp As Double, X0 As Double, Bf As Double, N As Double Dim v As Double, ll As Double, W As Double, M As Double, L0 As Double L0 = Radian(Lo) X0 = x * 0.000001 y = y - 500000# If Tq = 0 Then aegree(Lat) Lon = Degree(L0 + ll) r = Degree(r) End Sub 有了正反算,换带也就完成了~ 用到的子程序: Public Const Pi = 3.14159265358979, p = 206264.806 Public Cktq As String ‘角度化弧度 Public Function Radian(a As Double) As Double Dim Ro As Double Dim c As Double Dim Fs As Double Dim Ib As Integer Dim Ic As Integer If a < 0 Then a = -a: t = 1 Ro = Pi / 180# Ib = Int(a) c = (a - Ib) * 100# Ic = Int(c + 0.000000000001) Fs = (c - Ic) * 100# If t = 1 Then Radian = -(Ib + Ic / 60# + Fs / 3600#) * Ro Else Radian = (Ib + Ic / 60# + Fs / 3600#) * Ro End Function ‘弧度化角度 Public Function Degree(a As Double) As Double Dim Bo As Double Dim Fs As Double Dim Im As Integer Dim Id As Integer If a < 0 Then a = -a: t = 1 Bo = a Call DMS(Bo, Id, Im, Fs) If t = 1 Then Degree = -(Id + Im / 100# + Fs / 10000#) Else Degree = Id + Im / 100# + Fs / 10000# End Function Public Sub DMS(a As Double, Id As Integer, Im As Integer, Fs As Double) Dim Bo As Double Dim c A[标签:内容]
本文档为【测量方位角计算公式VB源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_562397
暂无简介~
格式:doc
大小:29KB
软件:Word
页数:11
分类:工学
上传时间:2017-09-18
浏览量:74