C高斯换带计算报告和代码.doc
《C高斯换带计算报告和代码.doc》由会员分享,可在线阅读,更多相关《C高斯换带计算报告和代码.doc(33页珍藏版)》请在冰点文库上搜索。
设计说明书
设计题目:
高斯投影换带计算
姓名:
指导教师:
专 业:
测绘工程
2013年7月2日
课程设计说明书
学号
姓名
课程设计具体工作内容
个人得分
208
程序总体设计与分析
207
C#界面开发
210
程序编程和调试
215
制作答辨PPT
程序设计与测试(0.7)
小组得分
界面设计友好,用户数据输入及操作自由度高,有测试数据;
20
数据结构设计合理,代码模块化,通用性强;
20
设计思想清晰,代码编写采取逐层递进格式,注释可读性高;
20
程序总体运行通过,各部分功能实现程度高,注重容错处理
40
设计说明书部分(0.3)
设计报告说明书内容全面,层次清楚、完整程度高
30
设计思路清析、对设计思想、完成情况等重要内容说明表达清晰,总体分析、详细设计、界面设计各部分内容表述清楚
50
数据结构和算法合理,知识点明晰
20
教师评语
成绩评分表
1设计内容
1.1设计意义
高斯投影虽然保证了角度投影前后没有变形,但其长度变形仍然存在,并且距离中央子午线愈远,长度变形愈大。
为了限制高斯投影的长度变形,将椭球面按一定经度的子午线划分成不同的投影带,把投影范围限制在中央子午线东西两侧一定的狭长地带内分别进行投影。
由于中央子午线的经度不同,使得椭球面上统一的大地坐标系,分割成为各带独立的平面坐标系。
为了得到统一的坐标系,必须进行换带计算。
在实际测量工作中,我们常常遇到坐标不统一的情况,为了计算简便,把不同形式的坐标转换成我们所需的坐标,为我们的工程服务,经常需要进行高斯投影正算、反算、坐标换带和子午线收敛角的计算工作。
为此,我们编写了这一程序设计,希望能使以后的转换工作更加简便。
本软件主要应用相关的转换公式,采用C#编程可随时随地实现任何参考椭球体下高斯坐标转换与大地坐标之间的正反算和换带计算,达到高斯平面坐标转换的目的。
本文所编程序的特点是,操作简单.输出简捷、结果完整,不需要另加辅助内容。
本设计主要是利用C#作为前端开发工具进行应用程序开发。
1.2基础理论
正算是指:
由大地坐标(L,B)求得高斯平面坐标(x,y)的过程。
反算是指:
由高斯平面坐标(x,y)求得大地坐标(L,B)的过程。
正算:
高斯投影必须满足的三个条件:
(1),中央子午线投影后为直线。
(2),中央子午线投影后长度不变。
(3),投影具有正性性质,即正性投影条件。
由第一个条件可知,中央子午线东西两侧的投影必然对称于中央子午线。
设在托球面上有P1,P2,且对称于中央子午线。
其大地坐标为(l,B),(-l,B)则投影后的平面坐标一定为P1·(x,y),P2·(x,-y).
由第二个条件可知,位于中央子午线上的点,投影后的纵坐标x应该等于投影前从赤道量至该点的子午弧长。
相应计算公式:
(克氏椭球)
其中:
(IAG椭球)
反算:
在高斯投影坐标反算时,原面是高斯平面,投影面是椭球面,则有如下的投影方程:
则其的三个条件:
(1),x坐标轴投影成中央子午线,是投影的对称轴;
(2),x轴上的长度投影保持不变;
(3),正性投影条件。
相应计算公式:
(克氏椭球)
其中:
(克氏椭球)
1.3数据流程图
进入系统
选择带转换和椭球系统
输入已知数据和中央子午线
任意带
输入已知数据
3-33-6带
重置
计算
2-1数据流程图
1.4详细设计
主要研究内容是利用c#软件把高斯换带计算从手算实现电算的一个过程。
主要分为四个界面:
(1)欢迎界面
主要结构
过程名
功能与作用
进入功能
label3_Click
欢迎界面进入主页面
(2)主程序界面
主要结构
过程名
功能与作用
读入函数
publicvoidReadData()
读入数据
反算函数
publicvoidFS()
高斯反算
正算函数
publicvoidZS()
高斯正算
弧度转角度函数
redian_a(doublealfa)
弧度转角度
角度转弧度函数
angle_r(doublealfa)
角度转弧度
输出函数
publicvoidWriteData()
输出数据
计算
button1_Click
进行换带计算
重置
button2_Click_1
恢复原状态
改变属性
radioButton3_CheckedChanged
点击3-3换带时改变textbox的属性
改变属性
radioButton4_CheckedChanged
点击3-3换带时改变textbox的属性
改变属性
radioButton5_CheckedChanged
点击3-3换带时改变textbox的属性
带号与中央子午线转换
带号与中央子午线转换ToolStripMenuItem_Click
进入带号与中央子午线转换窗体
弧度角度转换
弧度角度转换ToolStripMenuItem_Click
进入弧度角度转换窗体
关闭
Form1_FormClosing
关闭整个程序
(3)带号与中央子午线转换界面
主要结构
过程名
功能与作用
求中央子午线
button1_Click
由带号求中央子午线
求带号
button2_Click
中央子午线由求带号
关闭
Form3_FormClosing
关闭该窗体
(4)弧度角度转换界面
主要结构
过程名
功能与作用
角转弧
button1_Click
角度转弧度
弧转角
button2_Click
弧度转角度
关闭
Form3_FormClosing
关闭该窗体
2功能实现
2.1关键技术和难点
///
///反算函数
///
publicvoidFS()
{
///克氏椭球反算
if(radioButton1.Checked==true)
{
β=x/6367558.4969;
Bf=β+(50221746+(293622+(2350+22*Math.Pow(Math.Cos(β),2))*Math.Pow(Math.Cos(β),2))*Math.Pow(Math.Cos(β),2))*Math.Pow(10,-10)*Math.Sin(β)*Math.Cos(β);
Nf=6399698.902-(21562.267-(108.973-0.612*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2);
Z=y/(Nf*Math.Cos(Bf));
b2=(0.5+0.003369*Math.Pow(Math.Cos(Bf),2))*Math.Sin(Bf)*Math.Cos(Bf);
b3=0.333333-(0.166667-0.001123*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2);
b4=0.25+(0.16161+0.00562*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2);
b5=0.2-(0.1667-0.0088*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2);
B=Bf-(1-(b4-0.12*Z*Z)*Z*Z)*Z*Z*b2;
B1=redian_a(B);
l=(1-(b3-b5*Z*Z)*Z*Z)*Z;
L=L01+l;
L1=redian_a(L);
}
///IAG椭球反算
else
{
β=x/6367452.1328;
Bf=β+(50228976+(293697+(2383+22*Math.Pow(Math.Cos(β),2))*Math.Pow(Math.Cos(β),2))*Math.Pow(Math.Cos(β),2))*Math.Pow(10,-10)*Math.Sin(β)*Math.Cos(β);
Nf=6399596.652-(21565.045-(108.996-0.603*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2);
Z=y/(Nf*Math.Cos(Bf));
b2=(0.5+0.00336975*Math.Pow(Math.Cos(Bf),2))*Math.Sin(Bf)*Math.Cos(Bf);
b3=0.3333333-(0.1666667-0.001123*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2);
b4=0.25+(0.161612+0.005617*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2);
b5=0.2-(0.16667-0.00878*Math.Pow(Math.Cos(Bf),2))*Math.Pow(Math.Cos(Bf),2);
B=Bf-(1-(b4-0.147*Z*Z)*Z*Z)*Z*Z*b2;
B1=redian_a(B);
l=(1-(b3-b5*Z*Z)*Z*Z)*Z;
L=(L01+l);
L1=redian_a(L);
}
}
///克氏椭球
if(radioButton1.Checked==true)
{
///
///3-3正算函数
///
if(radioButton3.Checked==true)
{
if(MessageBox.Show("您确定向右换带吗?
","确定向右换带吗?
",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
l1=l-3*Math.PI/180;
}
else
{
l1=l+3*Math.PI/180;
}
}
///
///3-6正算函数
///
elseif(radioButton4.Checked==true)
{
if(MessageBox.Show("您确定向右换带吗?
","确定向右换带吗?
",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
l1=l-6*Math.PI/180;
}
else
{
l1=l+3*Math.PI/180;
}
}
///
///任意正算函数
///
elseif(radioButton5.Checked==true)
{
l1=L-L02;
}
N=6399698.902-(21562.267-(108.973-0.612*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B);
a0=32140.404-(135.3302-(0.7092-0.004*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B);
a4=(0.25+0.00252*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B)-0.04166;
a6=(0.166*Math.Cos(B)*Math.Cos(B)-0.084)*Math.Cos(B)*Math.Cos(B);
a3=(0.3333333+0.001123*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B)-0.1666667;
a5=0.0083-(0.1667-(0.1968+0.004*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B);
X=6367558.4969*B-(a0-(0.5+(a4+a6*l1*l1)*l1*l1)*l1*l1*N)*Math.Sin(B)*Math.Cos(B);
Y=(1+(a3+a5*l1*l1)*l1*l1)*l1*N*Math.Cos(B);
}
///克氏椭球
else
{
///
///3-3正算函数
///
if(radioButton3.Checked==true)
{
if(MessageBox.Show("您确定向右换带吗?
","确定向右换带吗?
",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
l1=l-3*Math.PI/180;
}
else
{
l1=l+3*Math.PI/180;
}
}
///
///3-6正算函数
///
elseif(radioButton4.Checked==true)
{
if(MessageBox.Show("您确定向右换带吗?
","确定向右换带吗?
",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
l1=l-6*Math.PI/180;
}
else
{
l1=l+3*Math.PI/180;
}
}
///
///任意正算函数
///
elseif(radioButton5.Checked==true)
{
l1=L-L02;
}
N=6399596.652-(21565.045-(108.996-0.603*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B);
a0=32144.5189-(135.3646-(0.7034-0.0041*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B);
a4=(0.25+0.00253*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B)-0.04167;
a6=(0.167*Math.Cos(B)*Math.Cos(B)-0.084)*Math.Cos(B)*Math.Cos(B);
a3=(0.3333333+0.001123*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B)-0.1666667;
a5=0.00878-(0.1702-0.20382*Math.Cos(B)*Math.Cos(B))*Math.Cos(B)*Math.Cos(B);
X=6367452.1328*B-(a0-(0.5+(a4+a6*l1*l1)*l1*l1)*l1*l1*N)*Math.Sin(B)*Math.Cos(B);
Y=(1+(a3+a5*l1*l1)*l1*l1)*l1*N*Math.Cos(B);
}
///
///角度转化为弧度
///
///