大地测量_高斯投影正反算
大地测量高斯投影正反算程序代码
课程:大地测量学基础
姓名:林 江 伟
学号: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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。