高斯投影正反算-c#代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高斯投影正反算程序设计

一.程序设计流程

本程序的设计思路如下:

(1),程序采用VS08版本作为开发平台,并采用C#语言作为开发语言,设计为WindowsForm 窗体程序形式。

(2),程序主要的算法来自于教材。但是本程序为了更加实用,添加了更多的解算基准,包括:WGS-84,国际椭球1975,克氏椭球,和2000国家大地坐标系。

(3),程序为了更方便的读取数据和输出数据,故需要自己定义了固定的数据输入格式和数据输出格式或形式,请老师注意查看。

二.代码

using System;

using System.Collections.Generic;

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

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

{

tt = boBox1.Items[boBox1.SelectedIndex].ToString(); }

catch

{

MessageBox.Show("Gauss Inverse: Choose datum error!");

return;

}

if (pareTo("克氏椭球")==0)

{

a = 6378245.00;

ee = Math.Sqrt(0.006693421622);

}

if (pareTo("WGS-84") == 0)

{

a = 6378137.00;

ee = Math.Sqrt(0.00669437999013);

}

if (pareTo("1975国际椭球") == 0)

{

a = 6378140.00;

ee = Math.Sqrt(0.006694384999588);

}

if (pareTo("2000国家大地坐标系") == 0)

{

a = 6378137.0;

ee =Math.Sqrt(0.0066943802290);

}

const double pai = 3.1415926;

double b = Math.Sqrt(a * a * (1 - ee * ee));

double c = a * a / b;

double epp = Math.Sqrt((a * a - b * b) / b / b);

CRDGEODETIC pcrdGeo;

CRDCARTESIAN pcrdCar;

double midlong;

//求纬度

string[] temp;

temp = textBox1.Text.Split(' ');

double[] tempradius = new double[3];

for (int i = 0; i < 3; i++)

{

tempradius[i] = Convert.ToDouble(temp[i]);

}

pcrdGeo.dLatitude = tempradius[0] / 180.0 * pai + tempradius[1] / 180.0 / 60.0 * pai + tempradius[2] / 180 / 60.0 / 60 * pai;

//求经度

temp = textBox2.Text.Split(' ');

for (int i = 0; i < 3; i++)

{

tempradius[i] = Convert.ToDouble(temp[i]);

}

pcrdGeo.dLongitude = tempradius[0] / 180.0 * pai + tempradius[1] / 180.0 / 60.0 * pai + tempradius[2] / 180 / 60.0 / 60 * pai;

int deglon = Convert.ToInt32(pcrdGeo.dLongitude * 180 / pai);

//求中央经度

int num; //带号 midlong = 0; //默认值,需要制定分带

try

{

tt = boBox3.Items[boBox3.SelectedIndex].ToString();

}

catch

{

MessageBox.Show("Choose 3/6 error!");

return;

}

相关文档
最新文档