当前位置:文档之家› 高斯投影正反算及换带计算VB程序设计

高斯投影正反算及换带计算VB程序设计

高斯投影正反算及换带计算VB程序设计
高斯投影正反算及换带计算VB程序设计

摘要

本设计主要阐述了高斯投影分带以及高斯投影坐标正、反算的推导公式,从而根据公式来编写基于VB语言基础上的换带及坐标转换程序。作者系统介绍了测量中经常使用的坐标系以及地图投影的概念和高斯投影的具体含义,叙述了换带和临带计算的原因以及它们在运算时的原理、过程,详细叙述了在VB语言中实现的原理基础以及代码的编写设计。

在设计中根据高斯的正反算公式写出了基于VB语言的程序设计,其程序设计任务完成了由地理坐标向54平面坐标系和80平面坐标系转换的功能,以及由54坐标系和80坐标系向地理坐标系转换的功能,同时也有同一平面坐标系不同投影带之间的换带计算和同一平面坐标系相同投影带临带计算等相互转换的功能。

关键词:高斯投影、坐标正反算、换带计算、临带换算、程序设计

5程序设计

5.1界面设计

本程序要实现的功能是根据所选择的椭球参数和指定的分带情况,将已知地理坐标或高斯投影坐标经正算和反算求得相应的高斯坐标和地理坐标,以及相应的换带计算和临带计算。因此需要用一个框架控件来组织椭球参数、两个框架分别组织分带选择和换算方式选择,两个框架组织地理坐标和高斯坐标,三个命令按钮分别执行投影计算、换带和临带计算。程

序设计界面如图5-1[9]

图5-1 高斯投影计算程序设计界面

命令按钮属性设置表如表5-1

表5-1 命令按钮属性设置表

选择椭球框架内控件的属性值表5-2

表5-2 择椭球框架内控件的属性值

单选按钮控件属性设置表5-3

5-3 单选按钮控件属性设置表

5.2程序代码设计

在这里主要介绍高斯投影坐标转换的正反算代码设计,完整的代码见附录1所示。

5.2.1投影计算过程的正算子过程代码设计

①54系高斯投影正算子过程

Public Sub Pro54()

Dim ll#, N#, a0#, a4#, a6#, a3#, a5#, cosB#

cosB = Cos(B)

ll = L - DoToHu(L0)

N = 6399698.902 - (21562.267 - (108.973 - 0.612 * cosB * cosB) * cosB * cosB) * cosB * cosB

a0 = 32140.404 - (135.3302 - (0.7092 - 0.004 * cosB * cosB) * cosB * cosB) * cosB * cosB

a4 = (0.25 + 0.00252 * cosB * cosB) * cosB * cosB - 0.04166

a6 = (0.166 * cosB * cosB - 0.084) * cosB * cosB

a3 = (0.3333333 + 0.001123 * cosB * cosB) * cosB * cosB - 0.1666667

a5 = 0.0083 - (0.1667 - (0.1968 + 0.004 * cosB * cosB) * cosB * cosB) * cosB * cosB

X = 6367558.4969 * B - (a0 - (0.5 + (a4 + a6 * ll * ll) * ll * ll) * ll * ll * N) * Sin(B) * cosB

Y = (1 + (a3 + a5 * ll * ll) * ll * ll) * ll * N * cosB

End Sub

②80系高斯投影正算子过程

Public Sub Pro80()

Dim ll#, N#, a0#, a4#, a6#, a3#, a5#, cosB#

cosB = Cos(B)

ll = L - DoToHu(L0)

N = 6399596.652 - (21565.045 - (108.996 - 0.603 * cosB * cosB) * cosB * cosB) * cosB * cosB

a0 = 32144.5189 - (135.3646 - (0.7034 - 0.0041 * cosB * cosB) * cosB *

cosB) * cosB * cosB

a4 = (0.25 + 0.00253 * cosB * cosB) * cosB * cosB - 0.04167

a6 = (0.167 * cosB * cosB - 0.083) * cosB * cosB

a3 = (0.3333333 + 0.001123 * cosB * cosB) * cosB * cosB - 0.1666667

a5 = 0.00878 - (0.1702 - 0.20382 * cosB * cosB) * cosB * cosB

X = 6367452.1328 * B - (a0 - (0.5 + (a4 + a6 * ll * ll) * ll * ll) * ll * ll * N) * Sin(B) * cosB

Y = (1 + (a3 + a5 * ll * ll) * ll * ll) * ll * N * cosB

End Sub

5.2.2投影计算过程的反算子过程代码设计

①54系高斯投影反算子过程[12]

Public Sub ConPro54()

Dim Bf#, bet#, Z#, Nf#, b2#, b3#, b4#, b5#, cos2B#, cos2Bf#

bet = X / 6367558.4969

cos2B = Cos(bet) * Cos(bet)

Bf = bet + (50221746 + (293622 + (2350 + 22 * cos2B) * cos2B) * cos2B) * 0.0000000001 * Sin(bet) * Cos(bet)

cos2Bf = Cos(Bf) * Cos(Bf)

Nf = 6399698.902 - (21562.267 - (108.973 - 0.612 * cos2Bf) * cos2Bf) * cos2Bf

Z = Y / (Nf * Cos(Bf))

b2 = (0.5 + 0.003369 * cos2Bf) * Sin(Bf) * Cos(Bf)

b3 = 0.333333 - (0.166667 - 0.001123 * cos2Bf) * cos2Bf

b4 = 0.25 + (0.16161 + 0.00562 * cos2Bf) * cos2Bf

b5 = 0.2 - (0.1667 - 0.0088 * cos2Bf) * cos2Bf

B = Bf - (1 - (b4 - 0.12 * Z * Z) * Z * Z) * Z * Z * b2

L = DoToHu(L0) + (1 - (b3 - b5 * Z * Z) * Z * Z) * Z

End Sub

②80系高斯投影反算子过程

Public Sub ConPro80()

Dim Bf#, bet#, Z#, Nf#, b2#, b3#, b4#, b5#, cos2B#, cos2Bf#

bet = X / 6367558.4969

cos2B = Cos(B) * Cos(B)

Bf = bet + (50221746 + (293622 + (2350 + 22 * cos2B) * cos2B) * cos2B) * 0.0000000001 * Sin(bet) * Cos(bet)

cos2Bf = Cos(Bf) * Cos(Bf)

Nf = 6399698.902 - (21562.267 - (108.973 - 0.612 * cos2Bf) * cos2Bf) * cos2Bf

Z = Y / (Nf * Cos(Bf))

b2 = (0.5 + 0.00336975 * cos2Bf) * Sin(Bf) * Cos(Bf)

b3 = 0.333333 - (0.166667 - 0.001123 * cos2Bf) * cos2Bf

b4 = 0.25 + (0.161612 + 0.005617 * cos2Bf) * cos2Bf

b5 = 0.2 - (0.16667 - 0.00878 * cos2Bf) * cos2Bf

B = Bf - (1 - (b4 - 0.147 * Z * Z) * Z * Z) * Z * Z * b2

L = DoToHu(L0) + (1 - (b3 - b5 * Z * Z) * Z * Z) * Z

End Sub

5.3程序的操作介绍

下面以实例来介绍程序的操作步骤。现有已知数据如下:

L=112°45′45.4545″,B=31°45′45.4545″

X=3516946.1923,y=19666998.4009

其具体的操作步骤如下:

①选择相关椭球

在名称为“选择椭球”框架控件内选择相应的椭球体,当选择完椭球体后此时程序会显示出与其相应的椭球参数,以选择北京1954参考椭球为例,见图5-2所示。

图5-2选择椭球体

②分带选择

在名称为“分带选择”框架控件内选择要进行计算的带宽,以六度带为例,其操作如图5-3所示。

图5-3分带选择

③换算方式的选择

在名称为“换算方式”框架控件内选择要进行计算的方式,以选择正算为例,如图5-4所示。

图5-4换算方式的选择

④已知数据的输入

当按以上步骤进行后应该在名称为“地理坐标”框架控件内输入大地经纬度的数值,如图5-5所示。

图5-5已知数据的输入

⑤在完成上述操作后点击按钮计算按钮,如图5-6所示。

图5-6计算按钮

在完成以上操作后会显示出要求的高斯平面坐标,其结果如图5-7所示。

图5-7高斯平面坐标

⑥换带计算

在完成上述6°带的计算后,想把结果换算到3°带可直接点击换带计算的按钮,如图5-8所示。

图5-8换带计算按钮

完成此操作后会显示出3°带的结果,如图5-9所示。

图5-9换带计算后的结果

⑦临带计算

在以上操作的基础上,在程序界面上直接点击“临带计算”按钮后会显示临带计算的结果,如图5-10所示。

图5-10临带计算的结果示意图

当要进行三度带及反算方式进行计算时其操作步骤和以上步骤相似在此就不做介绍了。

6总结

在这次是实习中通过搜集各种资料和咨询各位老师终于完成了设计。这次设计的任务完成了有地理坐标向高斯平面坐标转换的正算和反算,和在同一种高斯平面坐标系下不同投影带之间的相互转换即换带计算的功能,以及在同一种高斯平面坐标系下相同投影带之间临带换算功能。

当把已知的几组数据带入到本次所编写的程序中得到的结果与已知的数据相吻合,因此改程序的设计是成功的,它计算的结果可信度还是比较高的。但本程序也存在着不足,不足之处是该程序的各个功能只适合我国,对与别的国家和地区是不宜使用的。

参考文献

[1] 潘正风,杨正尧等.数字测图原理与方法[M] .武汉:武汉大学出版社,2004年,10~60

[2] 熊介.椭球大地测量学[M] .北京:解放军出版社,1988年,4~15

[3] 边少锋.地理坐标系与大地基准[M] .北京:国防工业出版社,2005年,1~50

[4] 孔祥云.大地测量学基础[M] .武汉:武汉大学出版社,2006年,1~8

[5] 孔祥云.控制测量学(下)[M] .武汉:武汉大学出版社,2002年,50~80

[6] 朱华统.常用地理坐标系及其变换[M].北京:解放军出版社,2003,15~35

[7]施一民.现代大地控制测量[M].北京:测绘出版社,2003年,21~30

[8] 冯亚明.高斯投影正反算的递推算法[J] .黑龙江测绘.1997,20(3):22~24

[9].郑永果,姚青. Visual Basic 程序设计[M].东营:石油大学出版社,2000年

[10]罗朝盛.VB6.0程序设计实用教程[M] .北京:清华大学出版社,2004年;15-25

[11]本书编委会.新编中文VB实用教程[M] .西安:西北工业大学出版社2007年,40~60

[12]. G. Bom ford, GEODESY[M], third edition, O xford U niversity Press, 1971,26~28

[13] https://www.doczj.com/doc/eb2641214.html,ments on proper use of the terrain correction for the computation of height anomalies. Manuscripta geodaetic ,1993. 26~28

[14]. W. Torge, Geodesy[M], W alter de Gruyter & Co. , Berlin, 1980,

[15] Berry D S and Sales T w.An Elastic Treatment of Ground Movement Due to Mining J.Mech .. Phys Solids 9 ,1961,

致谢

这次论文设计的顺利完成得到了我的导师钟来星的大力支持,从最初的选题、材料收集、开题报告、到完成初稿,钟老师给予了很大程度上的帮助,在此对钟老师的帮助表示真心的感谢。同时也得到了张晨晰、张纯连、赵心、于志刚、王永等老师的帮助在此表示感谢。

同时我也非常的感谢我的同学们,在我做设计的过程中他们给我提供了大量的意见以及在我遇到困难是提供了大量的帮助在此对他们表示真心的感谢。

在这四年的大学学习中我得到了许许多多老师的帮助,他们不辞辛苦把他们所能知道的知识尽他们最大可能的告诉我们,我今天的知识大部分来自于他们,没有他们的奉献就没有我今天的成绩,在此对所有教育过我的老师说声感谢。

我也非常感谢我的父母兄弟姐妹,是他们为了我的学业而辛苦的工作着,没有父母的支持我是没有机会接受教育的,他们为了儿女的幸福而默默的牺牲自己,他们不仅仅是我的经济支柱更是我的精神支柱,他们供我学习还教育我如何去做人,对此我深深的表示感谢。

同时再次的感谢我的导师钟来星他不仅教会我学习文化知识也教育我如何去做人,从他那里我学到了对工作要努力要负责,做事情要干脆利索,他的教育深深的影响着我。

附录

附录1 高斯投影坐标转换程序的代码设计

选择椭球及显示相应的参数代码设计

当选择不同选择椭球时显示与它相应的参数代码设计如下所示:

Private Sub Form_Load()

'初始化组合框

Combo1.AddItem "北京1954参考椭球"

Combo1.AddItem "西安1980参考椭球"

Combo1.ListIndex = 0

'初始化参数

lenL = 6

End Sub

选择分带及换算方式的代码设计

当选择了3°带分时代码如下:

Private Sub opt3du_Click()

cmdchange.Caption = " 3°->6°"

lenL = 3

End Sub

当选择了6°分带时代码如下:

Private Sub opt6du_Click()

cmdchange.Caption = " 6°->3°"

lenL = 6

End Sub

选择了反算方式

Private Sub optCon_Click()

cmdcalc.Caption = "xy->BL"

TxtB.Enabled = False

TxtL.Enabled = False

TxtX.Enabled = True

TxtY.Enabled = True

TxtX.SetFocus

End Sub

选择了正算方式

Private Sub optTran_Click()

cmdcalc.Caption = "BL->xy"

TxtB.Enabled = True

TxtL.Enabled = True

TxtX.Enabled = False

TxtY.Enabled = False

TxtB.SetFocus

End Sub

投影计算子过程的代码设计

54系高斯投影正算子过程

Public Sub Pro54()

Dim ll#, N#, a0#, a4#, a6#, a3#, a5#, cosB#

cosB = Cos(B)

ll = L - DoToHu(L0)

N = 6399698.902 - (21562.267 - (108.973 - 0.612 * cosB * cosB) * cosB * cosB) * cosB * cosB

a0 = 32140.404 - (135.3302 - (0.7092 - 0.004 * cosB * cosB) * cosB * cosB) * cosB * cosB

a4 = (0.25 + 0.00252 * cosB * cosB) * cosB * cosB - 0.04166

a6 = (0.166 * cosB * cosB - 0.084) * cosB * cosB

a3 = (0.3333333 + 0.001123 * cosB * cosB) * cosB * cosB - 0.1666667

a5 = 0.0083 - (0.1667 - (0.1968 + 0.004 * cosB * cosB) * cosB * cosB) * cosB * cosB

X = 6367558.4969 * B - (a0 - (0.5 + (a4 + a6 * ll * ll) * ll * ll) * ll * ll * N) * Sin(B) * cosB

Y = (1 + (a3 + a5 * ll * ll) * ll * ll) * ll * N * cosB

End Sub

80系高斯投影正算子过程

Public Sub Pro80()

Dim ll#, N#, a0#, a4#, a6#, a3#, a5#, cosB#

cosB = Cos(B)

ll = L - DoToHu(L0)

N = 6399596.652 - (21565.045 - (108.996 - 0.603 * cosB * cosB) * cosB * cosB) * cosB * cosB

a0 = 32144.5189 - (135.3646 - (0.7034 - 0.0041 * cosB * cosB) * cosB * cosB) * cosB * cosB

a4 = (0.25 + 0.00253 * cosB * cosB) * cosB * cosB - 0.04167

a6 = (0.167 * cosB * cosB - 0.083) * cosB * cosB

a3 = (0.3333333 + 0.001123 * cosB * cosB) * cosB * cosB - 0.1666667

a5 = 0.00878 - (0.1702 - 0.20382 * cosB * cosB) * cosB * cosB

X = 6367452.1328 * B - (a0 - (0.5 + (a4 + a6 * ll * ll) * ll * ll) * ll * ll * N) * Sin(B) * cosB

Y = (1 + (a3 + a5 * ll * ll) * ll * ll) * ll * N * cosB

End Sub

54系高斯投影反算子过程

Public Sub ConPro54()

Dim Bf#, bet#, Z#, Nf#, b2#, b3#, b4#, b5#, cos2B#, cos2Bf#

bet = X / 6367558.4969

cos2B = Cos(bet) * Cos(bet)

Bf = bet + (50221746 + (293622 + (2350 + 22 * cos2B) * cos2B) * cos2B) * 0.0000000001 * Sin(bet) * Cos(bet)

cos2Bf = Cos(Bf) * Cos(Bf)

Nf = 6399698.902 - (21562.267 - (108.973 - 0.612 * cos2Bf)

* cos2Bf) * cos2Bf

Z = Y / (Nf * Cos(Bf))

b2 = (0.5 + 0.003369 * cos2Bf) * Sin(Bf) * Cos(Bf)

b3 = 0.333333 - (0.166667 - 0.001123 * cos2Bf) * cos2Bf

b4 = 0.25 + (0.16161 + 0.00562 * cos2Bf) * cos2Bf

b5 = 0.2 - (0.1667 - 0.0088 * cos2Bf) * cos2Bf

B = Bf - (1 - (b4 - 0.12 * Z * Z) * Z * Z) * Z * Z * b2

L = DoToHu(L0) + (1 - (b3 - b5 * Z * Z) * Z * Z) * Z

End Sub

80系高斯投影反算子过程

Public Sub ConPro80()

Dim Bf#, bet#, Z#, Nf#, b2#, b3#, b4#, b5#, cos2B#, cos2Bf#

bet = X / 6367558.4969

cos2B = Cos(B) * Cos(B)

Bf = bet + (50221746 + (293622 + (2350 + 22 * cos2B) * cos2B) * cos2B) * 0.0000000001 * Sin(bet) * Cos(bet)

cos2Bf = Cos(Bf) * Cos(Bf)

Nf = 6399698.902 - (21562.267 - (108.973 - 0.612 * cos2Bf) * cos2Bf) * cos2Bf

Z = Y / (Nf * Cos(Bf))

b2 = (0.5 + 0.00336975 * cos2Bf) * Sin(Bf) * Cos(Bf)

b3 = 0.333333 - (0.166667 - 0.001123 * cos2Bf) * cos2Bf

b4 = 0.25 + (0.161612 + 0.005617 * cos2Bf) * cos2Bf

b5 = 0.2 - (0.16667 - 0.00878 * cos2Bf) * cos2Bf

B = Bf - (1 - (b4 - 0.147 * Z * Z) * Z * Z) * Z * Z * b2

L = DoToHu(L0) + (1 - (b3 - b5 * Z * Z) * Z * Z) * Z

End Sub

投影计算

单击投影计算命令按钮,程序根据当前系统状态计算有关参数,并调用相应子过程进行投影计算,具体代码如下

Private Sub cmdCalc_Click()

B = Val(TxtB.Text)

L = Val(TxtL.Text)

X = Val(TxtX.Text): Y = Val(Mid(TxtY.Text, 3))

'计算中央子午线经度和带号

If Opttran.Value = True Then '正算

If lenL = 6 Then

N = Int(L / lenL + 1)

L0 = N * lenL - lenL / 2

ElseIf lenL = 3 Then

N = Int((L - 1.5) / lenL + 1)

L0 = N * lenL

End If

ElseIf Optcon.Value = True Then '反算

N = Val(Left(TxtY.Text, 2))

If lenL = 6 Then

L0 = N * lenL - lenL / 2

ElseIf lenL = 3 Then

L0 = N * lenL

End If

End If

B = DoToHu(B)

L = DoToHu(L)

'根据椭球进行投影计算

If Opttran.Value = True Then '正算

If Combo1.ListIndex = 0 Then '54

Call Pro54

ElseIf Combo1.ListIndex = 1 Then '80

Call Pro80

End If

'Y坐标加500公里加带号

Y = Y + N * 1000000 + 500000

TxtX.Text = Format(X, "0.0000")

TxtY.Text = Format(Y, "0.0000")

ElseIf Optcon.Value = True Then '反算

'Y坐标还要再减500km

Y = Y - 500000

If Combo1.ListIndex = 0 Then '54

Call ConPro54

ElseIf Combo1.ListIndex = 1 Then '80

Call ConPro80

End If

TxtB.Text = Format(HuToDo(B), "0.00000000")

TxtL.Text = Format(HuToDo(L), "0.00000000")

End If

End Sub

换带计算

换带计算是首先根据高斯坐标经过高斯投影反算得到地理坐标,然后

高斯投影坐标正反算VB程序

高斯投影坐标正反算 V B程序 文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)

高斯投影坐标正反算 学院: 班级: 学号: 姓名: 课程名称: 指导老师:

实验目的: 1.了解高斯投影坐标正反算的基本思想; 2.学会编写高斯正反算程序,加深了解。 实验原理: 高斯投影正算公式中应满足的三个条件: 1. 中央子午线投影后为直线; 2. 中央子午线投影后长度不变; 3. 投影具有正形性质,即正形投影条件。 高斯投影反算公式中应满足的三个条件: 1. x坐标轴投影成中央子午线,是投影的对称轴; 2. x轴上的长度投影保持不变; 3. 正形投影条件,即高斯面上的角度投影到椭球面上后角度没有 变形,仍然相等。 操作工具: 计算机中的 代码: Dim a As Double, b As Double, x As Double, y As Double, y_#

Dim l_ As Double, b_ As Double, a0#, a2#, a4#, a6#, a8#, m2#, m4#, m6#, m8#, m0#, l0#, e#, e1# Dim deg1 As Double, min1 As Double, sec1 As Double, deg2 As Double, min2 As Double, sec2 As Double Private Sub Command1_Click() Dim x_ As Double, t#, eta#, N#, W#, k1#, k2#, ik1%, ik2%, dh% deg1 = Val min1 = Val sec1 = Val deg2 = Val min2 = Val sec2 = Val l_ = (deg1 * 3600 + min1 * 60 + sec1) / 206265 b_ = (deg2 * 3600 + min2 * 60 + sec2) / 206265 dh = Val k1 = ((l_ * 180 / + 3) / 6) k2 = (l_ * 180 / / 3) ik1 = Round(k1, 0) ik2 = Round(k2, 0) If dh = 6 Then l0 = 6 * ik1 - 3 Else

高斯投影正反算编程

高斯投影正反算 班级:测绘九班C 姓名:塔娜 学号:2009301610323 指导老师:苏新洲 2011-11-02

高斯投影正反算编程 一、题目: 已知部分数据,根据高斯投影正反算思想进行编程,并采用克氏椭球,按3°或6°带投影。 正算:已知大地坐标B 、L, 二、已知数据: 正算: B=51.38439023 L=111.02131360 反算: x=5724004.723 y=19502559.920 三、计算结果: 正算结果: x=5724004.723 y=19502559.920 反算结果: B=51.38439023 L=111.02131360

(不予画出) 五、源代码: #include"gaosi.h" #include"math.h" #include"stdio.h" #include"tchar.h" #include"stdlib.h" #define pi 3.141592653589793 #define rho 206265 void Calculateellipse2plane(double B,double L); void Calculateplane2ellipse(double x,double y); double Dms2Rad(double Dms); double D2Dms(double D); double Dms2D(double Dms); int main() { double B=0,L=0; double x=0,y=0; int i=0; printf("如使用高斯投影坐标正算,请输入1;反算,请输入2\n"); scanf_s("%d",&i); if(i==1)

高斯投影坐标正反算编程报告

高斯投影坐标正反算编程报告 1. 编程思想 进行高斯投影坐标正反算的编程需要牵涉到大量的公式,为了使程序条理更清楚,各块的数据复用性更强,这里采取了结构化的编程思想。 程序由四大块组成。 GeodesyHomework 、cpp 文件用于存放main()函数,就是整个程序的入口。通过结构化的编程尽力使main()函数变得简单。 MyFunction 、h 与MyFunction 、cpp 用于存放计算过程中进行角度弧度换算时所要用到的一些自定的转换函数。 Zhengsuan 、h 与Zhengsuan 、cpp 用于存放Zhengsuan 类,在Zhengsuan 类中声明了高斯投影坐标正算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及正算计算。通过get 函数获得相应的正算结果。 Fansuan 、h 与Fansuan 、cpp 用于存放Fansuan 类,类似于Zhengsuan 类,Fansuan 类中声明了高斯投影坐标反算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及反算计算。通过get 函数获得相应的反算结果。 2. 计算模型 高斯投影正算公式 6 4256 4 42234 22)5861(cos sin 720)495(cos 24cos sin 2l t t B B N l t B simB N l B B N X x ''+-''+ ''++-''+''?''+=ρηηρρ 5 2224255 3 2233 )5814185(cos 120)1(cos 6cos l t t t B N l t B N l B N y ''-++-''+ ''+-''+''?''=ηηρηρρ 高斯投影反算公式 () () ()( ) 2 22425 52 23 36 4254 222232 8624285cos 12021cos 6cos 459061720935242f f f f f f f f f f f f f f f f f f f f f f f f f f f f f t t t B N y t B N y B N y l y t t y N M t y t t N M t y N M t B B ηηηηη+++++++-=++- -+++ -= 3. 程序框图

3度6度带高斯投影详解.

3度6度带高斯投影 选择投影的目的在于使所选投影的性质、特点适合于地图的用途,同时考虑地图在图廓范围内变形较小而且变形分布均匀。海域使用的地图多采用保角投影,因其能保持方位角度的正确。 我国的基本比例尺地形图(1:5千,1:1万,1:2.5万,1:5万,1:10万,1:25万,1:50万,1:100万)中,大于等于50万的均采用高斯-克吕格投影(Gauss-Kruger),这是一个等角横切椭圆柱投影,又叫横轴墨卡托投影(Transverse Mercator);小于50万的地形图采用等角正轴割园锥投影,又叫兰勃特投影(Lambert Conformal Conic);海上小于50万的地形图多用等角正轴圆柱投影,又叫墨卡托投影(Mercator)。一般应该采用与我国基本比例尺地形图系列一致的地图投影系统。 地图坐标系由大地基准面和地图投影确定,大地基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的大地基准面,我们通常称谓的北京54坐标系、西安80坐标系实际上指的是我国的两个大地基准面。我国参照前苏联从1953年起采用克拉索夫斯基(Krassovsky)椭球体建立了我国的北京54坐标系,1978年采用国际大地测量协会推荐的IAG 75地球椭球体建立了我国新的大地坐标系--西安80坐标系,目前GPS定位所得出的结果都属于WGS84坐标系统,WGS84基准面采用WGS84椭球体,它是一地心坐标系,即以地心作为椭球体中心的坐标系。因此相对同一地理位置,不同的大地基准面,它们的经纬度坐标是有差异的。 采用的3个椭球体参数如下(源自“全球定位系统测量规范 GB/T 8314-2001”): 椭球体与大地基准面之间的关系是一对多的关系,也就是基准面是在椭球体基础上建立的,但椭球体不能代表基准面,同样的椭球体能定义不同的基准面,如前苏联的Pulkovo 1942、非洲索马里的Afgooye基准面都采用了Krassovsky

(完整word版)高斯投影正反算 代码

#include "stdafx.h" #include "iostream.h" #include "math.h" #include "stdio.h" #define P 206264.806247096355 #define PI 3.141592653589793 void GaosZ_fun() { printf("高斯投影的正算\n"); double l,L,B,n2,x,y,N,t,V,c,e2; double i,j,k,n,h,a0,a4,a6,a3,a5,cB2; int m; e2=0.006738525414683; c=6399698.901782711; B=17.33557339*3600/P; L=119.15521159*3600/P; l=L-111*3600/P // l=((m%6)*3600+n*60+h)/P; t=tan(B); n2=e2*cos(B)*cos(B); V=sqrt(1+n2); cB2=pow(cos(B),2); N=6399698.902-(21562.267-(108.973-0.612*cB2)*cB2)*cB2; // N=c/V; a0=32140.404-(135.3302-(0.7092-0.004*cB2)*cB2)*cB2; a4=(0.25+0.00252*cB2)*cB2-0.04166; a6=(0.166*cB2-0.084)*cB2; a3=(0.3333333+0.001123*cB2)*cB2-0.1666667; a5=0.0083-(0.1667-(0.1968+0.0040*cB2)*cB2)*cB2; // x=X+N*sin(B)*cos(B)*l*l/2+N*sin(B)*pow(cos(B),3)*(5-t*t+9*n2+4*n2*n2)*pow(l, 4)/24+N*sin(B)*pow(cos(B),5)*(61-58*t*t+pow(t,4))*pow(l,6)/720; // y=N*cos(B)*l+N*pow(cos(B),3)*(1-t*t+n2)*pow(l,5)/6+N*pow(cos(B),5)*(5-18*t*t +pow(t,4)+14*n2-58*n2*t*t)*pow(l,5)/120; x=6367558.4969*B-(a0-(0.5+(a4+a6*l*l)*l*l)*l*l*N)*sin(B)*cos(B); y=(1+(a3+a5*l*l)*l*l)*l*N*cos(B); printf("x=%f\ny=%f\n",x,y); } void GaosF_fun() { printf("高斯投影的反算\n"); double B,Bf,Nf,b,b2,b3,b4,b5,Z,x,y,L0,l;

高斯投影正反算

class Gauss { #region 高斯投影正反算 ///

/// 从大地坐标到平面坐标的高斯正算 /// /// 默认的是使用假定坐标的六度带投影 /// /// 大地纬度 /// 大地经度 /// 平面纵轴 /// 平面横轴 /// 参考椭球长半轴 /// 参考椭球扁率倒数 public static void BL_xy(double B, double L, out double x, out double y, double a, double f) { BL_xy(B, L, out x, out y, a, f, 6, true); } /// /// 从大地坐标到平面坐标的高斯正算 /// /// 默认的是使用假定坐标 /// /// 大地纬度 /// 大地经度 /// 平面纵轴 /// 平面横轴 /// 参考椭球长半轴 /// 参考椭球扁率倒数 /// 投影分带的带宽 public static void BL_xy(double B, double L, out double x, out double y, double a, double f, int beltWidth) { BL_xy(B, L, out x, out y, a, f, beltWidth, true); } /// /// 从大地坐标到平面坐标的高斯正算 /// /// 默认的是六度带投影 /// /// 大地纬度 /// 大地经度 /// 平面纵轴

高斯投影正反算编程(可编辑修改word版)

高斯投影正反算编程一.高斯投影正反算基本公式(1)高斯正算基本公式 (2)高斯反算基本公式

以上主要通过大地测量学基础课程得到,这不进行详细的推导,只是列出基本公式指导编程的进行。 二.编程的基本方法和流程图 (1)编程的基本方法 高斯投影正反算基本上运用了所有的编程基本语句,本文中是利用C++语言进行基本的设计。高斯正算中对椭球参数和带宽的选择主要运用了选择语句。而高斯反算中除了选择语句的应用,在利用迭代算法求底点纬度还应用了循环语句。编程中还应特别注意相关的度分秒和弧度之间的相互转换,这是极其重要的。 (2)相关流程图 1)正算

选择带宽 3/6 度带 计算带号 输入大地坐标 B ,L 和经差 L0 6 度带 3 度带 选择椭球参数 计算带号 计算弧长 计算平面坐标 x,y 打印 x,y 开始 计算平面坐标 x,y 计算弧长 打印 x,y

开始 输入自然值坐标x,y 和经差L0 选择椭球参数 利用迭代算法 求解底点纬度 利用公式计算B 和L 打印B 和L 2)反算

三.编程的相关代码(1)正算 # include "stdio.h" # include "stdlib.h" # include "math.h" # include "assert.h" #define pi (4*atan(1.0)) int i; struct jin { double B; double L; double L0; }; struct jin g[100]; main(int argc, double *argv[]) { FILE *r=fopen("a.txt","r"); assert(r!=NULL); FILE *w=fopen("b.txt","w"); assert(r!=NULL); int i=0;

(完整word版)高斯投影坐标正反算编程报告

高斯投影坐标正反算编程报告 10021班 张鑫 学号:2010302590040 1. 编程思想 进行高斯投影坐标正反算的编程需要牵涉到大量的公式,为了使程序条理更清楚,各块的数据复用性更强,这里采取了结构化的编程思想。 程序由四大块组成。 GeodesyHomework.cpp 文件用于存放main()函数,是整个程序的入口。通过结构化的编程尽力使main()函数变得简单。 MyFunction.h 和MyFunction.cpp 用于存放计算过程中进行角度弧度换算时所要用到的一些自定的转换函数。 Zhengsuan.h 和Zhengsuan.cpp 用于存放Zhengsuan 类,在Zhengsuan 类中声明了高斯投影坐标正算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及正算计算。通过get 函数获得相应的正算结果。 Fansuan.h 和Fansuan.cpp 用于存放Fansuan 类,类似于Zhengsuan 类,Fansuan 类中声明了高斯投影坐标反算所要用到的所有变量,在类的构造函数中进行成员变量的初始化及反算计算。通过get 函数获得相应的反算结果。 2. 计算模型 高斯投影正算公式 6 4256 4 42234 22)5861(cos sin 720)495(cos 24cos sin 2l t t B B N l t B simB N l B B N X x ''+-''+ ''++-''+''?''+=ρηηρρ 5 2224255 3 2233)5814185(cos 120)1(cos 6cos l t t t B N l t B N l B N y ''-++-''+''+-''+''?''=ηηρηρρ 高斯投影反算公式 () () ()( ) 222425 52 2336 4254 2222 32 8624285cos 12021cos 6cos 459061720935242f f f f f f f f f f f f f f f f f f f f f f f f f f f f f t t t B N y t B N y B N y l y t t y N M t y t t N M t y N M t B B ηηηηη+++++++-=++- -+++ -=

高斯投影正反算

高斯投影正反算 学院:资源与环境工程工程学院 专业:测绘工程 学号:X51414012 :超 一、高斯投影概述 想象有一个椭圆柱面横套在地球椭球体外面,并与某一条子午线相切,椭圆柱的中心轴通过椭球体的中心,然后用一定投影方法,将中央子午线两侧各一定经差围的地区投影到椭圆柱面上,再将此柱面展开即成为投影面。高斯投影由于是正形投影,故保证了投影的角度不变性,图形的相似性以及在某点各方向上长度比的同一性。由于采用了同样法则的分带投影,这即限制了长度变形,又保证了在不同投影带中采用相同的简便公式和数表进行变形引起的各项改正的计算,并且带与带间的互相换算也能用相同的公式和方法进行。高斯投影的这些优点必将使它得到广泛的推广和具有国际意义。 二、高斯投影坐标正算公式 1.高斯投影必须满足以下三个条件 1)中央子午线投影后为直线 2)中央子午线投影后长度不变 3)投影具有正形性质,即正形投影条件 2.高斯正算公式推导 1)由第一个条件可知,由于地球椭球体是一个旋转椭球体,所以高斯投影必然有这样一个性质,即中央子午线东西两侧的投影必然对称于中央子午线。 2)由于高斯投影是换带投影,在每带经差l是不大的,l ρ是一个微小量,所以可 以将 X=X (l,q ),Y=Y (l ,q ) 展开为经差为l 的幂级数,它可写成如下的形式 X=m 0+m 2l 2+m 4l 4 +…

Y=m 1l+m 3l 2+m 5l 5 +… 式中m 0,m1,m2,…是待定系数,他们都是纬度B 的函数。 3)由第三个条件:?y ?l =?x ?q 和?x ?l =-?y ?q ,将上式分别对l 和q 求偏导 234012342 3 4 01234........... x m m l m l m l m l y n n l n l n l n l =+++++=+++++ 可得到下式 03121234031212 34111,,,, 234111,,,,234dm dm dm dm n n n n dq dq dq dq dn dn dn dn m m m m dq dq dq dq ?====?? ? ?=-=-=-=-? ? 经过计算可以得出 2322445246 32235242225 sin cos sin cos (594)224 sin cos (6158)720 cos cos (1) 6 cos (5181458)120N N x X B B l B B t l N B B t t l N y N B l B t l N B t t t l ηηηηη=+ ?+-+++-+=?+-++-++-三、高斯投影坐标反算公式推导 1.思路:级数展开,应用高斯投影三个条件,待定系数法求解。 2.投影公式在底点处展开 12(,) (,) q f x y l f x y '='= 展开为

高斯投影坐标正反算VB程序

高斯投影坐标正反算 学院: 班级: 学号: 姓名: 课程名称: 指导老师:

实验目的: 1.了解高斯投影坐标正反算的基本思想; 2.学会编写高斯正反算程序,加深了解。 实验原理: 高斯投影正算公式中应满足的三个条件: 1. 中央子午线投影后为直线; 2. 中央子午线投影后长度不变; 3. 投影具有正形性质,即正形投影条件。 高斯投影反算公式中应满足的三个条件: 1. x坐标轴投影成中央子午线,是投影的对称轴; 2. x轴上的长度投影保持不变; 3. 正形投影条件,即高斯面上的角度投影到椭球面上后角度没 有变形,仍然相等。 操作工具: 计算机中的VB6.0 代码: Dim a As Double, b As Double, x As Double, y As Double, y_# Dim l_ As Double, b_ As Double, a0#, a2#, a4#, a6#, a8#, m2#, m4#,

m6#, m8#, m0#, l0#, e#, e1# Dim deg1 As Double, min1 As Double, sec1 As Double, deg2 As Double, min2 As Double, sec2 As Double Private Sub Command1_Click() Dim x_ As Double, t#, eta#, N#, W#, k1#, k2#, ik1%, ik2%, dh% deg1 = Val(Text1.Text) min1 = Val(Text2.Text) sec1 = Val(Text3.Text) deg2 = Val(Text4.Text) min2 = Val(Text5.Text) sec2 = Val(Text6.Text) l_ = (deg1 * 3600 + min1 * 60 + sec1) / 206265 b_ = (deg2 * 3600 + min2 * 60 + sec2) / 206265 dh = Val(Text9.Text) k1 = ((l_ * 180 / 3.14159 + 3) / 6) k2 = (l_ * 180 / 3.14159 / 3) ik1 = Round(k1, 0) ik2 = Round(k2, 0) If dh = 6 Then l0 = 6 * ik1 - 3 Else If dh = 3 Then

高斯投影正反算公式 新

高斯投影坐标正反算 一、相关概念 大地坐标系由大地基准面和地图投影确定,由地图投影到特定椭圆柱面后在南北两极剪开展开而成,是对地球表面的逼近,各国或地区有各自的大地基准面,我国目前主要采用的基准面为:基准面,为GPS基准面,17届国际大地测量协会上推荐,椭圆柱长半轴a=6378137m,短半轴b=; 2.西安80坐标系,1975年国际大地测量协会上推荐,椭圆柱长半轴a=6378140m,短半轴b=; 3.北京54坐标系,参照前苏联克拉索夫斯基椭球体建立,椭圆柱长半轴a=6378245m, 短半轴b=; 通常所说的高斯投影有三种,即投影后: a)角度不变(正角投影),投影后经线和纬线仍然垂直; b)长度不变; c)面积不变; 大地坐标一般采用高斯正角投影,即在地球球心放一点光源,地图投影到过与中央经线相切的椭圆柱面上而成;可分带投影,按中央经线经度值分带,有每6度一带或每3度一带两种(起始带中央经线经度为均为3度,即:6度带1带位置0-6度,3度带1带位置度),即所谓的高斯-克吕格投影。

图表11高斯投影和分带 地球某点经度(L)为过该点和地球自转轴的半圆与子午线所在半圆夹角,东半球为东经,西半球为西经;地球某点纬度(B)为所在水平面法线与赤道圆面的线面角。 正算是已知大地坐标(L,B),求解高斯平面坐标(X,Y),为确保Y值为正,Y增加500公里;反算则是由高斯平面坐标(X,Y)求解大地坐标(L,B)。 二、计算模型: 地球椭球面由椭圆绕地球自转轴旋转180度而成。 图表 1 椭圆 椭圆长半轴a,椭圆短半轴b, 椭圆方程:

(1) 图表2椭球面 椭球面方程: y2 a2+ x2 b2 + z2 a2 =1 /*************************************** 与网上充斥的将函数关系先展开为泰勒级数,再依据投影规则确定各参数不同,本文直接依据空间立体三角函数关系得出结果。 *****/ (一)正算 由图表1,

高斯投影坐标正算公式

高斯投影坐标正算公式 高斯投影坐标正反算公式 2.2.2. 1高斯投影坐标正算公式: B, x,y 高斯投影必须满足以下三个条件: ⑴中央子午线投影后为直线;⑵中央子午线投影后长度不变;⑶投影具有正形性质,即正形投影条件。 由第一条件知中央子午线东西两侧的投影必然对称于中央子午线,即 式中,x为的偶函数,y为的奇函数;,即, 如展开为的级数,收敛。 (2-10) 式中是待定系数,它们都是纬度B的函数。 由第三个条件知: 分别对和q求偏导数并代入上式 (2-11) 上两式两边相等,其必要充分条件是同次幂前的系数应相等,即

(2-12) (2-12)是一种递推公式,只要确定了就可依次确定其余各系数。 由第二条件知:位于中央子午线上的点,投影后的纵坐标x应等于投影前从赤道量至该点的子午线弧长X,即(2-10)式第一式中,当时有: (2-13) 顾及(对于中央子午线) 得: (2-14,15) (2-16) 依次求得并代入(2-10)式,得到高斯投影正算公式

(2-17) 2.2.2. 2高斯投影坐标反算公式 x,y B, 投影方程: (2-18) 高斯投影坐标反算公式推导要复杂些。 ⑴由x求底点纬度(垂足纬度),对应的有底点处的等量纬度,求x,y与 的关系式,仿照式有, 由于y和椭球半径相比较小(1/16.37),可将展开为y的幂级数;又由于是对称投影,q必是y的偶函数,必是y的奇函数。 (2-19) 是待定系数,它们都是x的函数. 由第三条件知: ,

, (2-20) (2-19)式分别对x和y求偏导数并代入上式 上式相等必要充分条件,是同次幂y前的系数相等, 第二条件,当y=0时,点在中央子午线上,即x=X,对应的点称为底点,其纬度为底点纬度,也就是x=X时的子午线弧长所对应的纬度,设所对应的等量纬度为。也就是在底点展开为y的幂级数。 由(2-19)1式 依次求得其它各系数 (2-21) (2-21)1 ………… 将代入(2-19)1式得

高斯投影正反算 c#代码

高斯投影正反算程序设计 一.程序设计流程 本程序的设计思路如下: (1),程序采用VS08版本作为开发平台,并采用C#语言作为开发语言,设计为WindowsForm 窗体程序形式。 (2),程序主要的算法来自于教材。但是本程序为了更加实用,添加了更多的解算基准,包括:WGS-84,国际椭球1975,克氏椭球,和2000国家大地坐标系。 (3),程序为了更方便的读取数据和输出数据,故需要自己定义了固定的数据输入格式和数据输出格式或形式,请老师注意查看。 二.代码 using System; using Syst using https://www.doczj.com/doc/eb2641214.html,ponentModel; using System.Data; using System.Drawing; using System.Text; namespace Gauss { public partial class Form1 : Form { //大地坐标 //Geodetic Coordinate public struct CRDGEODETIC { public double dLongitude; public double dLatitude; public double dHeight; } //笛卡尔坐标

//Cartesian Coordinate public struct CRDCARTESIAN { public double x; public double y; public double z; } public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { double ee = 0; double a = 0; string tt; try { } catch { MessageBox.Show("Gauss Inverse: Choose datum error!"); return; } if (https://www.doczj.com/doc/eb2641214.html,pareTo("克氏椭球")==0) { a = 6378245.00; } if (https://www.doczj.com/doc/eb2641214.html,pareTo("WGS-84") == 0) { a = 6378137.00; } if (https://www.doczj.com/doc/eb2641214.html,pareTo("1975国际椭球") == 0)

高斯投影正反算编程

高斯投影正反算编程 一、题目: 已知部分数据,根据高斯投影正反算思想进行编程,并采用克氏椭球,按3°或6°带投影。 正算:已知大地坐标B 、L, 二、已知数据: 正算: B=51.38439023 L=111.02131360 反算: x=5724004.723 y=19502559.920 三、计算结果: 正算结果: x=5724004.723 y=19502559.920 反算结果: B=51.38439023 L=111.02131360

五、源代码: #include"gaosi.h" #include"math.h" #include"stdio.h" #include"tchar.h" #include"stdlib.h" #define pi 3.141592653589793 #define rho 206265 void Calculateellipse2plane(double B,double L); void Calculateplane2ellipse(double x,double y); double Dms2Rad(double Dms); double D2Dms(double D); double Dms2D(double Dms);

int main() { double B=0,L=0; double x=0,y=0; int i=0; printf("如使用高斯投影坐标正算,请输入1;反算,请输入2\n"); scanf_s("%d",&i); if(i==1) { printf("请输入大地坐标纬度B(度分秒):\n"); scanf_s("%lf",&B); printf("请输入大地坐标经度L(度分秒):\n"); scanf_s("%lf",&L); Calculateellipse2plane(B,L); } if(i==2) { printf("请输入国家统一坐标x(m):\n"); scanf_s("%lf",&x); printf("请输入国家统一坐标y(m):\n"); scanf_s("%lf",&y); Calculateplane2ellipse(x,y); } return 0; } void Calculateellipse2plane(double B,double L) //高斯投影正算主体{ double l=0,Lo=0,a0=0,a3=0,a4=0,a5=0,a6=0,n=0,c=0; double x=0,y=0; double m=0,p=0,q=0; int N=0,i=0; //带号 printf("如使用6°带请输入1,使用3°带请输入2\n"); scanf_s("%d",&i); if(i==1) //已知a点在6°带的带号和中央子午线经度 { N=int(Dms2D(L)/6); Lo=6*N-3; } if(i==2) //已知a点在3°带的带号和中央子午线经度 { N=int((Dms2D(L)+1.5)/3);

高斯投影正算

高斯投影正、反算代码 //高斯投影正、反算 //////6度带宽 54年北京坐标系 //高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres) void GaussProjCal(double longitude, double latitude, double *X, double *Y) { int ProjNo=0; int ZoneWide; ////带宽 double longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval; double a,f, e2,ee, NN, T,C,A, M, iPI; iPI = 0.0174532925199433; ////3.1415926535898/180.0; ZoneWide = 6; ////6度带宽 a=6378245.0; f=1.0/298.3; //54年北京坐标系参数 ////a=6378140.0; f=1/298.257; //80年西安坐标系参数 ProjNo = (int)(longitude / ZoneWide) ; longitude0 = ProjNo * ZoneWide + ZoneWide / 2; longitude0 = longitude0 * iPI ; latitude0=0; longitude1 = longitude * iPI ; //经度转换为弧度 latitude1 = latitude * iPI ; //纬度转换为弧度 e2=2*f-f*f; ee=e2*(1.0-e2); NN=a/sqrt(1.0-e2*sin(latitude1)*sin(latitude1)); T=tan(latitude1)*tan(latitude1); C=ee*cos(latitude1)*cos(latitude1); A=(longitude1-longitude0)*cos(latitude1); M=a*((1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)*latitude1-(3*e2/8+3*e2*e2 /32+45*e2*e2 *e2/1024)*sin(2*latitude1)

高斯投影正反算c代码

高斯投影正反算c代码 Coca-cola standardization office【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-ZZT18】

高斯投影正反算程序设计 一.程序设计流程 本程序的设计思路如下: (1),程序采用VS08版本作为开发平台,并采用C#语言作为开发语言,设计为WindowsForm窗体程序形式。 (2),程序主要的算法来自于教材。但是本程序为了更加实用,添加了更多的解算基准,包括:WGS-84,国际椭球1975,克氏椭球,和2000国家大地坐标系。 (3),程序为了更方便的读取数据和输出数据,故需要自己定义了固定的数据输入格式和数据输出格式或形式,请老师注意查看。 二.代码 using System; using ; using ; using ; using ; using Gauss { public partial class Form1 : Form { double b = (a * a * (1 - ee * ee)); double c = a * a / b; double epp = ((a * a - b * b) / b / b); CRDGEODETIC pcrdGeo; CRDCARTESIAN pcrdCar; double midlong = 0;

//求X,Y和带号 = ; ytext = ; string temp = (0, 2); num = (temp); ytext = (0, 2); = (ytext) - 500000; try { tt = } catch { ("Choose 3/6 error!"); return; } if ("3度带") == 0) { midlong = num * 3 * pai / 180; } if ("6度带") == 0) { midlong = (6 * num - 3) * pai / 180; } b = (a * a * (1 - ee * ee)); c = a * a / b; epp = (a * a - b * b) / b; double m0, m2, m4, m6, m8; double a0, a2, a4, a6, a8; m0 = a * (1 - ee * ee);

高斯投影正反算C#代码

高斯投影是正形投影的一种,同一坐标系中的高斯投影换带计算公式是根据正形投影原理推导出的两个高斯坐标系间的显函数式。在同一大地坐标系中(例如1954北京坐标系或1980西安坐标系),如果两个高斯坐标系只是主子午线的经度不同,那么显函数式前的系数可以根据坐标系使用的椭球元素和主子午线经度唯一确定。但如果两个高斯坐标系除了主子午线的经度不同以外,还存在其他线性系,则将线性变换公式代入换带计算的显函数式中,仍然可以得到严密的坐标变换公式。此时显函数式前的系数等价于使用两个坐标系主子午线的经度和线性变换参数联合求解得到的,可以唯一确定。 //6度带宽54北京坐标系 //高斯投影由大地坐标(Unit:Metres)反算经纬度(Unit:DD) void GaussProjInvCal(double X, double Y, double *longitude, double *latitude) { int ProjNo; int ZoneWide; ////带宽 double longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval; double e1,e2,f,a, ee, NN, T,C, M, D,R,u,fai, iPI; iPI = 0.0174532925199433; ////3.1415926535898/180.0; a = 6378245.0; f = 1.0/298.3; //54年北京坐标系参数 ////a=6378140.0; f=1/298.257; //80年西安坐标系参数 ZoneWide = 6; ////6度带宽 ProjNo = (int)(X/1000000L) ; //查找带号 longitude0 = (ProjNo-1) * ZoneWide + ZoneWide / 2; longitude0 = longitude0 * iPI ; //中央经线 X0 = ProjNo*1000000L+500000L; Y0 = 0; xval = X-X0; yval = Y-Y0; //带内大地坐标

高斯投影坐标正反算VB程序

高斯投影坐标正反算V B 程序 Jenny was compiled in January 2021

高斯投影坐标正反算 学院: 班级: 学号: 姓名: 课程名称: 指导老师:

实验目的: 1.了解高斯投影坐标正反算的基本思想; 2.学会编写高斯正反算程序,加深了解。 实验原理: 高斯投影正算公式中应满足的三个条件: 1. 中央子午线投影后为直线; 2. 中央子午线投影后长度不变; 3. 投影具有正形性质,即正形投影条件。 高斯投影反算公式中应满足的三个条件: 1. x坐标轴投影成中央子午线,是投影的对称轴; 2. x轴上的长度投影保持不变; 3. 正形投影条件,即高斯面上的角度投影到椭球面上后角度没有 变形,仍然相等。 操作工具: 计算机中的 代码: Dim a As Double, b As Double, x As Double, y As Double, y_#

Dim l_ As Double, b_ As Double, a0#, a2#, a4#, a6#, a8#, m2#, m4#, m6#, m8#, m0#, l0#, e#, e1# Dim deg1 As Double, min1 As Double, sec1 As Double, deg2 As Double, min2 As Double, sec2 As Double Private Sub Command1_Click() Dim x_ As Double, t#, eta#, N#, W#, k1#, k2#, ik1%, ik2%, dh% deg1 = Val min1 = Val sec1 = Val deg2 = Val min2 = Val sec2 = Val l_ = (deg1 * 3600 + min1 * 60 + sec1) / 206265 b_ = (deg2 * 3600 + min2 * 60 + sec2) / 206265 dh = Val k1 = ((l_ * 180 / + 3) / 6) k2 = (l_ * 180 / / 3) ik1 = Round(k1, 0) ik2 = Round(k2, 0) If dh = 6 Then l0 = 6 * ik1 - 3 Else

高斯投影坐标正反算公式及适合电算的高斯投影公式

§8.3高斯投影坐标正反算公式 任何一种投影①坐标对应关系是最主要的;②如果是正形投影,除了满足正形投影的条件外(C-R 偏微分方程),还有它本身的特殊条件。 8.3.1高斯投影坐标正算公式: B,l ? x,y 高斯投影必须满足以下三个条件: ①中央子午线投影后为直线;②中央子午线投影后长度不变;③投影具有正形性质,即正形投影条件。 由第一条件知中央子午线东西两侧的投影必然对称于中央子午线,即 (8-10)式中,x 为l 的偶函数,y 为l 的奇函数;0330 '≤l ,即20/1/≈''''ρl , 如展开为l 的级数,收敛。 +++=++++=553316644220l m l m l m y l m l m l m m x (8-33) 式中 ,,10m m 是待定系数,它们都是纬度B 的函数。 由第三个条件知: q y l x l y q x ??-=????=??, (8-33)式分别对l 和q 求偏导数并代入上式 ----=++++++=+++553315 63424 42204 52 3164253l dq dm l dq dm l dq dm l m l m l m l dq dm l dq dm dq dm l m l m m (8-34) 上两式两边相等,其必要充分条件是同次幂l 前的系数应相等,即

dq dm m dq dm m dq dm m 231 20 13121? =? -== (8-35) (8-35)是一种递推公式,只要确定了 0m 就可依次确定其余各系数。 由第二条件知:位于中央子午线上的点,投影后的纵坐标x 应等于投影前从赤道量至该点的子午线弧长X ,即(8-33)式第一式中,当0=l 时有: 0m X x == (8-36) 顾及(对于中央子午线) B V M r M B N dq dB M dB dX cos cos 2 ==== 得: B V c B N r dq dB dB dX dq dX dq dm m cos cos 01===?===(8-37,38) B B N dq dB dB dm dq dm m cos sin 2 2121112=?-=?-= (8-39) 依次求得6543,,,m m m m 并代入(8-33)式,得到高斯投影正 算公式

相关主题
文本预览
相关文档 最新文档