大地测量高斯投影正反算_第1页
大地测量高斯投影正反算_第2页
大地测量高斯投影正反算_第3页
大地测量高斯投影正反算_第4页
大地测量高斯投影正反算_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高斯投影正反算姓名: 王义文 班级:四班 学号:2009301610135程序说明:本程序基于MFC基本对话框,由于MFC程序构建框架的代码冗长,打印出来恐怕影响阅读效率,所以下面的代码是经过剔除之后的一些核心代码,希望老师谅解!界面关联变量说明:纬度值的度、分、秒分别与B_DD,B_MM,B_SS相关联,缺省项自动设定为0。 经度值的度、分、秒分别与L_DD,L_MM,L_SS相关联,同上。L0_DD则表示为L0的值,单位:度。x,y分别与坐标值关联,且y为加500KM以后的值。单位:米。m_keshi=1是克氏椭球,=0为IAG椭球,且此处不能缺省。m_zheng=1表示正算,=0为反算,

2、且此处不能缺省。核心代码说明:void C高斯投影正反算4Dlg:OnBnClickedRadio3() /此处为正算的设定,如果正算,设定输入焦 点在B_DD。x,y为只读项。m_zheng=1; (CEdit*)GetDlgItem(IDC_EDIT1)->SetFocus(); (CEdit*)GetDlgItem(IDC_EDIT1)->SetReadOnly(FALSE); (CEdit*)GetDlgItem(IDC_EDIT2)->SetReadOnly(FALSE); (CEdit*)GetDlgItem(IDC_EDIT3)->SetReadOnly(

3、FALSE); (CEdit*)GetDlgItem(IDC_EDIT4)->SetReadOnly(FALSE); (CEdit*)GetDlgItem(IDC_EDIT5)->SetReadOnly(FALSE); (CEdit*)GetDlgItem(IDC_EDIT6)->SetReadOnly(FALSE); (CEdit*)GetDlgItem(IDC_EDIT7)->SetReadOnly(FALSE); (CEdit*)GetDlgItem(IDC_EDIT8)->SetReadOnly(); (CEdit*)GetDlgItem(IDC_EDIT

4、9)->SetReadOnly();void C高斯投影正反算4Dlg:OnBnClickedRadio4() /反算的设定:设置输入焦点在L0_DD,且B, L的角度值为只读。void C高斯投影正反算4Dlg:OnBnClickedRadio1()void C高斯投影正反算4Dlg:OnBnClickedRadio2() m_keshi=0; /IAG m_keshi=1; /克氏 m_zheng=0; (CEdit*)GetDlgItem(IDC_EDIT7)->SetFocus(); (CEdit*)GetDlgItem(IDC_EDIT1)->SetReadOnly

5、(); (CEdit*)GetDlgItem(IDC_EDIT2)->SetReadOnly(); (CEdit*)GetDlgItem(IDC_EDIT3)->SetReadOnly(); (CEdit*)GetDlgItem(IDC_EDIT4)->SetReadOnly(); (CEdit*)GetDlgItem(IDC_EDIT5)->SetReadOnly(); (CEdit*)GetDlgItem(IDC_EDIT6)->SetReadOnly(); (CEdit*)GetDlgItem(IDC_EDIT7)->SetReadOnly(FALSE

6、); (CEdit*)GetDlgItem(IDC_EDIT8)->SetReadOnly(FALSE); (CEdit*)GetDlgItem(IDC_EDIT9)->SetReadOnly(FALSE);void C高斯投影正反算4Dlg:OnBnClickedButton1() /核心算法 double t, ita2, W, N; t = tan(dfBR); ita2 = e12*cos(dfBR)*cos(dfBR); W = sqrt(1-e2*sin(dfBR)*sin(dfBR); double a0, a2, a4, a6; a0 = m0 + m2/2 + m

7、4*3/8 + m6*5/16 + m8*35/128; a2 = m2/2 + m4/2 + m6*15/32 + m8*7/16; a4 = a6 = m4/8 + m6*3/16 + m8*7/32; m6/32 + m8/16; double m0, m2, m4, m6, m8; m0 = a*(1-e2); m2 = e2*m0*3/2; m4 = e2*m2*5/4; m6 = e2*m4*7/6; m8 = e2*m6*9/8; double a, b, e2, e12; if (m_keshi = 1) else e2 = (a*a-b*b)/(a*a); e12 = (a*

8、a-b*b)/(b*b); a = 6378140.0; b = 6356755.2881575287; a = 6378245.0; b = 6356863.0187730473; double dfRou = 3600*180/PI; UpdateData(); double dfBR,dfDeltaLR; if (m_zheng = 1) int nLC = (int)(L_DD+3)/6.0 + 0.5); dfBR = (3600.0*B_DD +60.0*B_MM+B_SS)/dfRou; dfDeltaLR = (3600.0*L_DD +60.0*L_MM+L_SS -3600

9、.0*(L0_DD)/dfRou;N = a/W; double X, m; X = a0*dfBR - sin(dfBR)*cos(dfBR)*(a2-a4+a6) + (2*a4-a6*16/3)*pow(sin(dfBR),2) + a6*pow(sin(dfBR),4)*16/3);x = X + N*t*(0.5 + (5 -t*t +9*ita2 +4*ita2)/24 + (61- 58*t*t y = N*(1 + (1 -t*t +ita2)/6 + (5 -18*t*t +t*t*t*t +4*ita2 +t*t*t*t)*m*m/720)*m*m)*m*m); m = c

10、os(dfBR)*dfDeltaLR; -58*ita2*t*t)*m*m/120)*m*m)*m);double H = y/Nf, dfBD, dfLD; dfBR = Bf - 0.5*Vf2*tf*(H*H - (5 +3*tf*tf +itaf2 -9*itaf2*tf*tf)*pow(H,4)/12 + (61 double tf, itaf2, Wf, Nf, Vf2; tf = tan(Bf); itaf2 = e12*cos(Bf)*cos(Bf); Wf = sqrt(1-e2*sin(Bf)*sin(Bf); Nf= a/Wf; Vf2 = 1+itaf2; y=y-50

11、0000; double Bf = x/a0, fBf; fBf = sin(Bf)*cos(Bf)*(a2 -a4 +a6) + (2*a4 -a6*16/3)*pow(sin(Bf),2) else y += 500000; +a6*pow(sin(Bf),4)*16/3); while (fabs(Bf - (x+fBf)/a0) > 1e-16) Bf = (x + fBf)/a0; fBf = sin(Bf)*cos(Bf)*(a2 -a4 +a6) + (2*a4 -a6*16/3)*pow(sin(Bf),2) +a6*pow(sin(Bf),4)*16/3); +90*t

12、f*tf +45*tf*tf)*pow(H,6)/360);dfDeltaLR = (H - (1 +2*tf*tf +itaf2)*pow(H,3)/6 + (5 +28*tf*tf +24*tf*tf +6*itaf2 +8*itaf2*tf*tf)*pow(H,5)/120)/cos(Bf);dfBD = dfBR*180/PI;B_DD = (int)(dfBD); B_MM = (int)(dfBD -B_DD)*60); B_SS = (dfBD -B_DD)*60 -B_MM)*60; int nLC=(L0_DD+3)/6; dfLD = (nLC*6-3) + dfDelta

13、LR*180/PI; L_DD = (int)(dfLD); L_MM = (int)(dfLD -L_DD)*60); L_SS = (dfLD -L_DD)*60 -L_MM)*60; y += 500000; if (fabs(B_SS-60) < 0.00005) if (fabs(L_SS-60) < 0.00005) L_SS = 0.0; L_MM +=1; if (L_MM = 60) L_MM = 0; L_DD +=1; B_SS = 0.0; B_MM +=1; if (B_MM = 60) B_MM = 0; B_DD +=1; UpdateData(FALSE); UpdateData(FALSE);HBRUSH C高斯投影正反算4Dlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)/ TODO: 在此更改 DC 的任何特性 if (pWnd-> GetDlgCtrlID() = IDC_STATIC15) HBRUSH h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论