高斯正反算VB实验代码.docx
《高斯正反算VB实验代码.docx》由会员分享,可在线阅读,更多相关《高斯正反算VB实验代码.docx(10页珍藏版)》请在冰豆网上搜索。
高斯正反算VB实验代码
高斯正反算实验报告
一、实验目的:
通过对高斯正反算的软件编程,增强学生对《大地测量学基础》课程的理解,使学生牢固掌握高斯正反算的基本原理和公式,熟悉高斯正反算的基本技能和计算方法。
培养学生利用计算机编程的能力、综合运用知识的能力及理论联系实际的能力
二、实验要求:
要求学生综合运用测绘知识、大地测量知识、数学知识和计算机知识,设计数学模型和程序算法,编制程序实现数据的自动化处理。
三、实验环境
Visualstudio2008
界面如下:
输入数据计算:
代码如下:
PublicClass高斯投影正反算
PrivateSub高斯投影正反算_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
'自动化控件显示初始值
RadioButton2.Checked=True
RadioButton3.Checked=True
TextBox1.Focus()
TextBox1.Text="0"
TextBox2.Text="0"
TextBox3.Text="0"
TextBox4.Text="0"
TextBox5.Text="0"
TextBox6.Text="0"
RichTextBox2.Text="说明:
输入的坐标需为按6°带投影且采用克氏椭球参数所得的国家统一坐标"
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
'获取输入数据
Dimbb1AsDouble,bb2AsDouble,bb3AsDouble,ll1AsDouble,ll2AsDouble,ll3AsDouble
bb1=TextBox1.Text
bb2=TextBox2.Text
bb3=TextBox3.Text
ll1=TextBox4.Text
ll2=TextBox5.Text
ll3=TextBox6.Text
DimBAsDouble,LAsDouble,xAsDouble,yAsDouble,X1AsDouble,Y1AsDouble'X1Y1
DimNAsInteger
DimL0AsDouble,l1AsDouble
DimpAsDouble
p=206264.80625
'检查输入格式的正确性
If(bb1>=0Andbb1<90Andbb2>=0Andbb2<60Andbb3>=0Andbb3<60)Then
B=bb1*3600+bb2*60+bb3
Else
RichTextBox1.Text="纬度输入格式不正确!
"
Return
EndIf
If(ll1>=0Andll1<360Andll2>=0Andll2<60Andll3>=0Andll3<60)Then
L=ll1*3600+ll2*60+ll3
Else
RichTextBox1.Text="经度输入格式不正确!
"
Return
EndIf
Dimb1AsDouble'b1
b1=B/p
'获取用户选项值
DimtydAsInteger
If(RadioButton2.Checked=True)Then
tyd=6
Else
tyd=3
EndIf
DimtyAsInteger
If(RadioButton3.Checked=True)Then
ty=1
Else
ty=2
EndIf
'按带求带号以及中央子午线经度()
If(tyd=6)Then
N=Int(L/(6*3600.0))+1
L0=(6*N-3)*3600.0
l1=(L-L0)/p
ElseIf(tyd=3)Then
N=Int(L/(3*3600.0)+0.5)
L0=3*N*3600.0
l1=(L-L0)/p
EndIf
'采用克氏椭球参数的计算公式
If(ty=1)Then
DimcAsDouble
Dimc1AsDouble
Dimc2AsDouble
Diml2AsDouble
Dimn1AsDouble
Dima0AsDouble
Dima3AsDouble
Dima4AsDouble
Dima5AsDouble
Dima6AsDouble
DimiAsInteger
i=1
c=Math.Pow(Math.Cos(b1),2)
c1=Math.Sin(b1)*Math.Cos(b1)
c2=Math.Cos(b1)
l2=Math.Pow(l1,2)
n1=6399698.902-(21562.267-(108.973-0.612*c)*c)*c'n1
a0=32140.404-(135.3302-(0.7092-0.004*c)*c)*c
a4=(0.25+0.00252*c)*c-0.04166
a6=(0.166*c-0.084)*c
a3=(0.3333333+0.001123*c)*c-0.1666667
a5=0.0083-(0.1667-(0.1968+0.004*c)*c)*c
x=6367558.4969*b1-(a0-(0.5+(a4+a6*l2)*l2)*l2*n1)*c1
y=(1+(a3+a5*l2)*l2)*l1*n1*c2
X1=x
Dimy11AsDouble
y11=y+500000.0
Ify11/i>1Then
Y1=N*i*10+y11'Y坐标加代号
i=i*10
EndIf
DimtuoqiuAsString
tuoqiu="采用克氏椭球参数,"
RichTextBox1.Text="按经差"+tyd.ToString("0")+"°进行投影分带,"+tuoqiu+"其计算结果为:
"+vbCrLf+"x="+x.ToString("0.00000000")+vbCrLf+"y="+y.ToString("0.00000000")+vbCrLf+"国家统一坐标为:
"+vbCrLf+"X="+X1.ToString("0.00000000")+vbCrLf+"Y="+N.ToString+Y1.ToString("0.00000000")
EndIf
'采用1975国际椭球参数的计算公式()
If(ty=2)Then
DimcAsDouble
Dimc1AsDouble
Dimc2AsDouble
Diml2AsDouble
Dimn1AsDouble
Dima0AsDouble
Dima3AsDouble
Dima4AsDouble
Dima5AsDouble
Dima6AsDouble
DimiAsInteger
i=1
c=Math.Cos(b1)*Math.Cos(b1)
c1=Math.Sin(b1)*Math.Cos(b1)
c2=Math.Cos(b1)
l2=Math.Pow(l1,2)
n1=6399596.652-(21565.045-(108.996-0.603*c)*c)*c
a0=32144.5189-(135.3646-(0.7034-0.0041*c)*c)*c
a4=(0.25+0.00253*c)*c-0.04167
a6=(0.167*c-0.083)*c
a3=(0.3333333+0.001123*c)*c-0.1666667
a5=0.00878-(0.1702-0.20382*c)*c
x=6367452.1328*b1-(a0-(0.5+(a4+a6*l2)*l2)*l2*n1)*c1
y=(1+(a3+a5*l2)*l2)*l1*n1*c2
X1=x
Dimy11AsDouble
y11=y+500000.0
Ify11/i>1Then
Y1=N*i*10+y11'Y坐标加代号
i=i*10
EndIf
DimtuoqiuAsString
tuoqiu="采用1975国际椭球参数,"
RichTextBox1.Text="按经差"+tyd.ToString("0")+"°进行投影分带,"+tuoqiu+"其计算结果为:
"+vbCrLf+"x="+x.ToString("0.00000000")+vbCrLf+"y="+y.ToString("0.00000000")+vbCrLf+"国家统一坐标为:
"+vbCrLf+"X="+X1.ToString("0.00000000")+vbCrLf+"Y="+N.ToString+Y1.ToString("0.00000000")
EndIf
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
DimyAsDouble,X1AsDouble,Y1AsDouble,BAsDouble,LAsDouble
X1=TextBox7.Text'获取输入数据
Y1=TextBox8.Text
DimL0AsDouble
DimiAsInteger
i=1
DoWhileY1/i>=10
y=Y1-Int(Y1/i)*i-500000
L0=6*Int(Y1/i)-3
i=i*10
Loop'对Y坐标处理并求出中央子午线经度
'按6°带克氏椭球反算
DimbtAsDouble,BT1AsDouble,c3AsDouble,c4AsDouble,BfAsDouble,c5AsDouble,c6AsDouble,NfAsDouble,ZAsDouble
Dimb2AsDouble,b3AsDouble,b4AsDouble,b5AsDouble,z2AsDouble
DimpAsDouble
p=206264.80625
bt=X1/6367558.4969*p
BT1=X1/6367558.4969
c3=Math.Cos(BT1)*Math.Cos(BT1)
c4=Math.Sin(BT1)*Math.Cos(BT1)
Bf=(bt+(50221746+(293622+(2350+22*c3)*c3)*c3)*c4*Math.Pow(10,-10)*p)/p
c5=Math.Pow(Math.Cos(Bf),2)
c6=Math.Sin(Bf)*Math.Cos(Bf)
Nf=6399698.902-(21562.267-(108.973-0.612*c5)*c5)*c5
Z=y/(Nf*Math.Cos(Bf))
b2=(0.5+0.003369*c5)*c6
b3=0.333333-(0.166667-0.001123*c5)*c5
b4=0.25+(0.16161+0.00562*c5)*c5
b5=0.2-(0.1667-0.0088*c5)*c5
z2=Math.Pow(Z,2)
B=(Bf*p-(1-(b4-0.12*z2)*z2)*z2*b2*p)/3600.0
L=L0+((1-(b3-b5*z2)*z2)*Z*p)/3600.0
RichTextBox2.Text="按6°带克氏椭球反算后,结果为:
"+vbCrLf+"B="+B.ToString("0.0000000000000")+vbCrLf+"L="+L.ToString("0.0000000000000")
EndSub
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click
TextBox1.Focus()
TextBox1.Text="0"
TextBox2.Text="0"
TextBox3.Text="0"
TextBox4.Text="0"
TextBox5.Text="0"
TextBox6.Text="0"
RichTextBox1.Text=""
EndSub
PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click
TextBox7.Text=""
TextBox8.Text=""
RichTextBox2.Text="说明:
输入的坐标需为按6°带投影且采用克氏椭球参数所得的国家统一坐标"
EndSub
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.Click
End
EndSub
EndClass