您的位置:首页 > 编程语言 > C#

C# 大地测量高斯投影正反算公式计算程序

2018-09-16 10:54 323 查看

C# 大地测量高斯投影正反算公式程序

C# 大地测量高斯投影正反算公式计算程序

一、编程作业要求:

      编写能够进行高斯投影正反算公式计算的程序。

二、实验效果:

三、部分代码实现

1.选择界面

[code]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GaussProjection
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void label1_Click(object sender, EventArgs e)
{

}

private void Form1_Load(object sender, EventArgs e)
{
label1.BackColor = Color.Transparent;
}

private void button1_Click(object sender, EventArgs e)
{
Form2 F2 = new Form2();
F2.Show();
}

private void button2_Click(object sender, EventArgs e)
{
Form3 F3 = new Form3();
F3.Show();
}
}
}

2.坐标正算

[code]private void Form2_Load(object sender, EventArgs e)
{

}

double a, e2, e12, l, X, m0, m2, m4, m6, m8, a0, a2, a4, a6, a8;
double d2r = 180 * 3600 / Math.PI;

private void button1_Click(object sender, EventArgs e)
{
double B, L, W, N, t2, n2, n0, n, L0, x, y;
int d1 = int.Parse(textBox1.Text);
int f1 = int.Parse(textBox5.Text);
double m1 = double.Parse(textBox6.Text);
B = (d1 * 3600 + f1 * 60 + m1);
d1 = int.Parse(textBox8.Text);
f1 = int.Parse(textBox7.Text);
m1 = double.Parse(textBox2.Text);
L = (d1 * 3600 + f1 * 60 + m1);
if (radioButton1.Checked)
{
a = 6378245.0;
e2 = 0.006693421622966;
e12 = 0.006738525414683;
m0 = a * (1 - e2);
m2 = (3 * e2 * m0) / 2;
m4 = (5 * e2 * m2) / 4;
m6 = (7 * e2 * m4) / 6;
m8 = (9 * e2 * m6) / 8;
a0 = (m0 + (m2 / 2) + ((3 * m4) / 8) + ((5 * m6) / 16) + ((35 * m8) / 128));
a2 = m2 / 2 + m4 / 2 + 15 * m6 / 32 + 7 * m8 / 16;
a4 = m4 / 8 + 3 * m6 / 16 + 7 * m8 / 32;
a6 = m6 / 32 + m8 / 16;
a8 = m8 / 128;

}
else if (radioButton2.Checked)
{
a = 6378140.0;
e2 = 0.006694384999588;
e12 = 0.006739501819473;
m0 = a * (1 - e2);
m2 = 3 * e2 * m0 / 2;
m4 = 5 * e2 * m2 / 4;
m6 = 7 * e2 * m4 / 6;
m8 = 9 * e2 * m6 / 8;
a0 = m0 + m2 / 2 + 3 * m4 / 8 + 5 * m6 / 16 + 35 * m8 / 128;
a2 = m2 / 2 + m4 / 2 + 15 * m6 / 32 + 7 * m8 / 16;
a4 = m4 / 8 + 3 * m6 / 16 + 7 * m8 / 32;
a6 = m6 / 32 + m8 / 16;
a8 = m8 / 128;
}
else if (radioButton3.Checked)
{
a = 6378137.0;
e2 = 0.0066943799013;
e12 = 0.00673949674227;
m0 = a * (1 - e2);
m2 = 3 * e2 * m0 / 2;
m4 = 5 * e2 * m2 / 4;
m6 = 7 * e2 * m4 / 6;
m8 = 9 * e2 * m6 / 8;
a0 = m0 + m2 / 2 + 3 * m4 / 8 + 5 * m6 / 16 + 35 * m8 / 128;
a2 = m2 / 2 + m4 / 2 + 15 * m6 / 32 + 7 * m8 / 16;
a4 = m4 / 8 + 3 * m6 / 16 + 7 * m8 / 32;
a6 = m6 / 32 + m8 / 16;
a8 = m8 / 128;
}
if (radioButton4.Checked)
{
l = 0;
n0 = (L / 3600) / 6.0;
n = Math.Ceiling(n0);
L0 = (6 * n - 3) * 3600;
l = L - L0;
}
else if (radioButton5.Checked)
{
l = 0;
n = (int)((L / 3600) / 3.0);
L0 = 3 * n * 3600;
l = L - L0;
}
else if (radioButton6.Checked)
{
l = 0;
n = (int)((L / 3600) / 1.5);
L0 = 1.5 * n * 3600;
l = L - L0;
}
W = Math.Sqrt(1 - e2 * Math.Sin(B / d2r) * Math.Sin(B / d2r));
N = a / W;
t2 = Math.Tan(B / d2r) * Math.Tan(B / d2r);
n2 = e12 * Math.Cos(B / d2r) * Math.Cos(B / d2r);
X = a0 * (B / d2r) - a2 * Math.Sin(2 * B / d2r) / 2 + a4 * Math.Sin(4 * B / d2r) / 4 - a6 * Math.Sin(6 * B / d2r) / 6 + a8 * Math.Sin(8 * B / d2r) / 8;
x = X + N * Math.Sin(B / d2r) * Math.Cos(B / d2r) * l * l / (2 * Math.Pow(d2r, 2)) + N * Math.Sin(B / d2r) * Math.Pow(Math.Cos(B / d2r), 3) * (5 - t2 + 9 * n2 + 4 * n2 * n2) * Math.Pow(l, 4) / (24 * Math.Pow(d2r, 4)) + N * Math.Sin(B / d2r) * Math.Pow(Math.Cos(B / d2r), 5) * (61 - 58 * t2 + t2 * t2) * Math.Pow(l, 6) / (720 * Math.Pow(d2r, 6));
y = N * Math.Cos(B / d2r) * l / d2r + N * Math.Pow(Math.Cos(B / d2r), 3) * (1 - t2 + n2) * Math.Pow(l, 3) / (6 * Math.Pow(d2r, 3)) + N * Math.Pow(Math.Cos(B / d2r), 5) * (5 - 18 * t2 + t2 * t2 + 14 * n2 - 58 * n2 * t2) * Math.Pow(l, 5) / (120 * Math.Pow(d2r, 5));
x = Math.Round(x, 4);
y = Math.Round(y, 4);
textBox3.Text = x.ToString();
textBox4.Text = y.ToString();
}

四、程序文件及源代码

       C# 大地测量高斯投影正反算公式程序

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: