导线网平差

  • 格式: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,

"---------------------------------------------------------------------------------------------"