导线网平差
- 格式:doc
- 大小:52.00 KB
- 文档页数:26
导线网平差
'***********************************************************************************
' 本程序用于单一附(闭)合导线严密平差计算,采用按角度条件平差法。以方向观测值中
'误差的先验值作为单位权中误差。计算结果可求得各待定点的坐标平差值及其点位精度Mx,My,
'及M,并计算出各待定点误差椭圆元素E,F,Z
'
'参考文献: 郭久训.《控制网平差程序设计》
北京:原子能出版社,2004.8
'
'平差数据来源:潘正风等.《数字测图原理与方法》 武汉大学出版社 186页表6-5
'
'等级:所用平差数据为首级图根导线数据(精度很不高)。本程序中写出了方位角和导线全长相对闭合差的判
'别,但考虑到程序的通用性,将这些限差判断当作了注释处理,而不实际运行。
'
'程序不足:没有导线网的图形表达。
'***********************************************************************************
Private i%, j%, n%, tc#, tb#, B_x!, B_y!, e1!,
e2!, m!, m0#, z#, aa As Boolean, bb As Boolean,
cc As Boolean ',dd As Boolean
Private Naa#(2, 2), Naa逆#(2, 2), W#(2),
K#(2), qq#(2), fx#(2), fy#(2)
Private A#(), Q#(), V#(), C#(), mx#(), my#(),
mk#(), e#(), f#(), zz#()
Private Po() As Point
'文件格式说明:
'文件格式详见文件"平差数据.txt"
'
Private Sub 打开文件_Click()
'打开文件
Dim ff$, temp$, A_name$, A_x!, A_y!,
A_l#, A_s!, B_name$, B_l#, C_name$, C_x!,
C_y!, D_name$, D_x!, D_y!
Form1.Cls '清屏
CommonDialog1.DialogTitle = "打开数据文件"
CommonDialog1.FileName = ""
CommonDialog1.ShowOpen
'出错处理
On Error GoTo FileErr
ff = CommonDialog1.FileName
'ff是文件路径名
Open ff For Input As #1
'以顺序文件方式打开文件,使用input
Line Input #1, temp
'读取文件中的说明语句
Line Input #1, temp
'读取文件中的说明语句
Line Input #1, temp
'读取文件中的说明语句
Input #1, n
'读取n,n为 (测站数-1)
ReDim Po(n) As Point
'定义Po(n),其中Po(0)存A点数据,Po(n)存B点数据,Po(1)到Po(n-1)存n-1个未知点数据。
Line Input #1, temp
'读取文件中的说明语句
Line Input #1, temp
'读取文件中的说明语句
Input #1, m, e1, e2
'读取先验方向观测值中误差m,测距仪固定误差e1,比例误差e2
Line Input #1, temp
'读取文件中的说明语句
Line Input #1, temp
'读取文件中的说明语句
Input #1, C_name, C_x, C_y
'读取已知点C
Input #1, A_name, A_x, A_y, A_l, A_s
'读取已知点A
For i = 1 To n - 1
'读取n-1个未知点
Input #1, Po(i).name, Po(i).l,
Po(i).s
Next i
Input #1, B_name, B_x, B_y, B_l
'读取已知点B
Input #1, D_name, D_x, D_y
'读取已知点D
Close #1
tc = ZBiaoFSuan(C_x, C_y, A_x, A_y)
'坐标反算,求点C到A的坐标方位角,并记作tc,单位是度
tb = ZBiaoFSuan(B_x, B_y, D_x, D_y)
'坐标反算,求点B到D的坐标方位角,并记作tb,单位是度
Po(0).name = A_name: Po(0).x = A_x:
Po(0).y = A_y: Po(0).l = A_l: Po(0).s = A_s
'Po(0)存A点数据
Po(n).name = B_name: Po(n).x = B_x:
Po(n).y = B_y: Po(n).l = B_l
'Po(n)存B点数据
For i = 0 To n
Po(i).l = deg(Po(i).l)
'将观测方向左角的单位度分秒化作度
Next i
ReDim Q#(2 * n), A#(2, 2 * n), V#(2
* n), C#(1, 2 * n - 2), mx#(n - 1), my#(n -
1), _
mk#(n - 1), e#(n - 1), f#(n - 1),
zz#(n - 1) '变量重新定义
bb = True
MsgBox "文件已成功打开", , "提示"
显示平差数据 ff
Exit Sub
FileErr:
MsgBox "您的文件未打开或打开的文件格式有误!注意:请重新运行本程序!!", , "提示"
End Sub
'
'
'
Private Sub 开始计算_Click()
If bb = True Then
推算方位角和坐标 '求近似坐标
求条件式
'If dd = True Then '若平差数据没有超限,则进行下面的计算
组法方程式
求逆求K
求改正数和平差值
推算方位角和坐标 '求平差后坐标
精度评定
'Else
'MsgBox "限差超限!", , "提示"
'Exit Sub
'End If
Else
MsgBox "数据文件未打开!!", , "提示"
Exit Sub
End If
aa = True
MsgBox "计算完毕!", , "提示"
显示平差结果
End Sub
'
'
'
Private Sub 保存_Click()
Dim ff$
If aa = True Then
CommonDialog1.DialogTitle = "保存平差结果"
CommonDialog1.Filter =
"(*.txt)|*.txt"
CommonDialog1.FileName = "平差结
果.txt"
CommonDialog1.ShowSave
ff = CommonDialog1.FileName
If ff = "" Then
MsgBox "文件名不能为空", , "警告"
Exit Sub
End If
Open ff For Output As #2
'以顺序文件方式保存文件,使用output
Print #2, "平差结果:"
Print #2,
"---------------------------------------------------------------------------------------------"
Print #2, " 单位权中误差 m0=" &
Format(m0, "####.##") & " 秒"
Print #2,
"---------------------------------------------------------------------------------
------------"
Print #2, "点名", "x(m)",
"y(m)", "点位误差(cm)", "E(cm)", "F(cm)",
"Z(度分秒)"
For i = 1 To n - 1
Print #2, " " & Po(i).name,
Format(Po(i).x, "########.####"),
Format(Po(i).y, "########.####"), " " &
Format(mk(i), "#####.##"), _
" " &
Format(e(i), "#####.##"), " " &
Format(f(i), "#####.##"), " " &
Format(zz(i), "###.#####")
Next i
Print #2,
"---------------------------------------------------------------------------------------------"