首页 大地测量_高斯投影正反算

大地测量_高斯投影正反算

举报
开通vip

大地测量_高斯投影正反算大地测量_高斯投影正反算 大地测量高斯投影正反算程序代码 课程:大地测量学基础 姓名:林 江 伟 学号:2008301610045 班级: 0804 界面如下: 输入数据计算: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Window...

大地测量_高斯投影正反算
大地测量_高斯投影正反算 大地测量高斯投影正反算程序代码 课程:大地测量学基础 姓名:林 江 伟 学号:2008301610045 班级: 0804 界面如下: 输入数据计算: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace 大地 { public partial class Form1 : Form { double B, L; double x, y; double X, Y; int N; double L0, l1; double p=206264.80625; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //自动化控件显示初始值 radioButton2.Checked=true; radioButton3.Checked = true; textBox1.Focus(); textBox1.Text = textBox2.Text = textBox3.Text = textBox4.Text = textBox5.Text = textBox6.Text = "0"; this.richTextBox2.Text = "说明:输入的坐标需为按6?带投影且采用克氏椭球参数所得的国家统一坐标"; } private void button1_Click(object sender, EventArgs e) { //获取输入数据 double bb1=Convert.ToDouble(this.textBox1.Text); double bb2=Convert.ToDouble(this.textBox2.Text); double bb3=Convert.ToDouble(this.textBox3.Text); double ll1=Convert.ToDouble(this.textBox4.Text); double ll2=Convert.ToDouble(this.textBox5.Text); double ll3=Convert.ToDouble(this.textBox6.Text); //检查输入格式的正确性 if (bb1 >= 0 && bb1 <90 && bb2 >= 0 && bb2 < 60 && bb3 >= 0 && bb3 < 60) { B = bb1 * 3600 + bb2 * 60 + bb3; } else { MessageBox.Show("纬度输入格式不正确~", "警告"); return; } if (ll1 >= 0 && ll1<360 && ll2 >= 0 && ll2 < 60 && ll3 >= 0 && ll3 < 60) { L = ll1 * 3600 + ll2 * 60 + ll3; } else { MessageBox.Show("经度输入格式不正确~", "警告"); return; } double b = B/p; //获取用户选项值 int tyd=radioButton1.Checked?3:6; int tq=radioButton3.Checked?1:2; //按带求带号以及中央子午线经度 if (tyd == 6) { N =(int)( L / (6*3600.0)) + 1; L0 = (6 * N - 3)*3600.0; l1 = (L-L0)/p; } if(tyd==3) { N =(int)(L / (3*3600.0)+0.5); L0 = 3 * N * 3600.0; l1 =( L-L0)/p; } //采用克氏椭球参数的计算公式 if (tq == 1) { double c = Math.Pow( Math.Cos(b),2); double c1= Math.Sin(b) * Math.Cos(b); double c2=Math.Cos(b); double l2 = Math.Pow(l1,2); double n = 6399698.902 - (21562.267 - (108.973 - 0.612 * c) * c) * c; double a0 = 32140.404 - (135.3302 - (0.7092 - 0.0040 * c) * c) * c; double a4 = (0.25 + 0.00252 * c) * c - 0.04166; double a6 = (0.166 * c - 0.084) * c; double a3 = (0.3333333 + 0.001123 * c) * c - 0.1666667; double a5 = 0.0083 - (0.1667 - (0.1968 + 0.0040 * c) * c) * c; x = 6367558.4969 * b - (a0 - (0.5 + (a4 + a6 * l2) * l2) * l2 * n) *c1; y = (1 + (a3 + a5 * l2) * l2) * l1 * n * c2; X = x; double y1 = y + 500000.0; for (int i = 1; y1 / i > 1; i = i * 10) { Y = N * i*10 + y1; } string tuoqiu = "采用克氏椭球参数,"; this.richTextBox1.Text = "按经差" + tyd + "?进行投影分带," + tuoqiu + "其计算结果为:" + "\r\n" + "x=" + x + "\r\n" + "y=" + y + "\r\n" + "国家统一坐标为:" + "\r\n" + "X=" + X + "\r\n" + "Y=" + Y; } //采用1975国际椭球参数的计算公式 if (tq == 2) { double c = Math.Cos(b) * Math.Cos(b); double c1 = Math.Sin(b) * Math.Cos(b); double c2 = Math.Cos(b); double l2 = Math.Pow(l1, 2); double n = 6399596.652 - (21565.045 - (108.996 - 0.603 * c) * c) * c; double a0 = 32144.5189 - (135.3646 - (0.7034 - 0.0041 * c) * c) * c; double a4 = (0.25 + 0.00253 * c) * c - 0.04167; double a6 = (0.167 * c - 0.083) * c; double a3 = (0.3333333 + 0.001123 * c) * c - 0.1666667; double a5 = 0.00878 - (0.1702 - 0.20382 * c) * c; x = 6367452.1328 * b-(a0 - (0.5 + (a4 + a6 * l2) * l2) * l2 * n) * c1; y = (1 + (a3 + a5 * l2) * l2) * l1 * n * c2; X = x; double y1 = y + 500000.0; for (int i = 1; y1 / i > 1; i = i * 10)//Y坐标加代号 { Y = N * i * 10 + y1; } string tuoqiu = "采用1975国际椭球参数,"; this.richTextBox1.Text = "按经差" + tyd + "?进行投影分带," + tuoqiu + "其计算结果为:" + "\r\n" + "x=" + x + "\r\n" + "y=" + y+"\r\n"+ "国家统一坐标为:" + "\r\n" + "X=" + X + "\r\n"+"Y="+Y; } } private void button2_Click(object sender, EventArgs e) { X = Convert.ToDouble(this.textBox7.Text);//获取输入数据 Y = Convert.ToDouble(this.textBox8.Text); for (int i = 1; Y/i >=10; i = i * 10)//对Y坐标处理并求出中央子午线经度 { y = Y - (int)(Y / i) * i-500000; L0 = 6 * (int)(Y / i) - 3; } //按6?带克氏椭球反算 double bt = x / 6367558.4969*p; double BT = x / 6367558.4969; double c3=Math.Cos(BT)*Math.Cos(BT); double c4=Math.Sin(BT)*Math.Cos(BT); double Bf=(bt+(50221746+(293622+(2350+22*c3)*c3)*c3)*c4*Math.Pow(10,-10)*p)/p; double c5=Math.Pow(Math.Cos(Bf),2); double c6=Math.Sin(Bf)*Math.Cos(Bf); double Nf=6399698.902-(21562.267-(108.973-0.612*c5)*c5)*c5; double Z=y/(Nf*Math.Cos(Bf)); double b2 = (0.5 + 0.003369 * c5) * c6; double b3 = 0.333333 - (0.166667 - 0.001123 * c5) * c5; double b4 = 0.25 + (0.16161 + 0.00562 * c5) * c5; double b5=0.2-(0.1667-0.0088*c5)*c5; double 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; this.richTextBox2.Text = "按6?带克氏椭球反算后,结果为:"+ "\r\n"+"B=" + B + "\r\n" + "L=" + L; } } }
本文档为【大地测量_高斯投影正反算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_624976
暂无简介~
格式:doc
大小:62KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-11
浏览量:12