高斯投影正反算 c#代码

上传人:小** 文档编号:93663121 上传时间:2019-07-26 格式:DOC 页数:11 大小:128KB
返回 下载 相关 举报
高斯投影正反算 c#代码_第1页
第1页 / 共11页
高斯投影正反算 c#代码_第2页
第2页 / 共11页
高斯投影正反算 c#代码_第3页
第3页 / 共11页
高斯投影正反算 c#代码_第4页
第4页 / 共11页
高斯投影正反算 c#代码_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《高斯投影正反算 c#代码》由会员分享,可在线阅读,更多相关《高斯投影正反算 c#代码(11页珍藏版)》请在金锄头文库上搜索。

1、高斯投影正反算程序设计一程序设计流程本程序的设计思路如下:(1),程序采用VS08版本作为开发平台,并采用C#语言作为开发语言,设计为WindowsForm窗体程序形式。(2),程序主要的算法来自于教材。但是本程序为了更加实用,添加了更多的解算基准,包括:WGS-84,国际椭球1975,克氏椭球,和2000国家大地坐标系。(3),程序为了更方便的读取数据和输出数据,故需要自己定义了固定的数据输入格式和数据输出格式或形式,请老师注意查看。二代码using System;using System.Collections.Generic;using System.ComponentModel;usi

2、ng 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

3、 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.IboBox1.SelectedIndex.ToString(); catch MessageBox.Show(Gauss Inverse: Choose datum er

4、ror!); return; if (tt.CompareTo(克氏椭球)=0) a = 6378245.00; ee = Math.Sqrt(0.006693421622); if (tt.CompareTo(WGS-84) = 0) a = 6378137.00; ee = Math.Sqrt(0.00669437999013); if (tt.CompareTo(1975国际椭球) = 0) a = 6378140.00; ee = Math.Sqrt(0.006694384999588); if (tt.CompareTo(2000国家大地坐标系) = 0) a = 6378137.0

5、; 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 temprad

6、ius = new double3; for (int i = 0; i 3; i+) tempradiusi = Convert.ToDouble(tempi); pcrdGeo.dLatitude = tempradius0 / 180.0 * pai + tempradius1 / 180.0 / 60.0 * pai + tempradius2 / 180 / 60.0 / 60 * pai; /求经度 temp = textBox2.Text.Split( ); for (int i = 0; i 3; i+) tempradiusi = Convert.ToDouble(tempi

7、); pcrdGeo.dLongitude = tempradius0 / 180.0 * pai + tempradius1 / 180.0 / 60.0 * pai + tempradius2 / 180 / 60.0 / 60 * pai; int deglon = Convert.ToInt32(pcrdGeo.dLongitude * 180 / pai); /求中央经度 int num; /带号 midlong = 0; /默认值,需要制定分带 try tt = boBox3.IboBox3.SelectedIndex.ToString(); catch MessageBox.Sh

8、ow(Choose 3/6 error!); return; if (tt.CompareTo(3度带) = 0) num = Convert.ToInt32(deglon / 6 + 1); midlong = (6 * num - 3) / 180.0 * pai; if (tt.CompareTo(6度带) = 0) num = Convert.ToInt32(deglon + 1.5) / 3); midlong = num * 3 * pai / 180; double lp=pcrdGeo.dLongitude - midlong; double N = c / Math.Sqrt

9、(1 + epp * epp * Math.Cos(pcrdGeo.dLatitude) * Math.Cos(pcrdGeo.dLatitude); double M = c / Math.Pow(1 + epp * epp * Math.Cos(pcrdGeo.dLatitude) * Math.Cos(pcrdGeo.dLatitude), 1.5); double ita = epp * Math.Cos(pcrdGeo.dLatitude); double t = Math.Tan(pcrdGeo.dLatitude); double Nscnb = N * Math.Sin(pcr

10、dGeo.dLatitude) * Math.Cos(pcrdGeo.dLatitude); double Ncosb = N * Math.Cos(pcrdGeo.dLatitude); double cosb = Math.Cos(pcrdGeo.dLatitude); double X; double m0, m2, m4, m6, m8; double a0, a2, a4, a6, a8; m0 = a * (1 - ee * ee); m2 = 3.0 / 2.0 * m0 * ee * ee; m4 = 5.0 / 4.0 * ee * ee * m2; m6 = 7.0 / 6.0 * ee * ee * m4; m8 = 9.0 / 8.0 * ee * ee * m6; a0 = m0 + m2 / 2.0 + 3.0 / 8.0 * m4 + 5.0 / 16.0 * m6

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号