面向对象程序设计 - 陈士城- 副本

2019-03-02 23:37

面向对象程序设计

1、开发环境:VC++6.0。

2、主要工作:在测量中会涉及到几种坐标系统的转换,本程序实现了一下几类坐标系的转换(包括:北京-54坐标,国家-80坐标,WGS-84坐标)。

? 大地坐标与高斯平面坐标的转换。

将大地坐标(B,L)转为高斯平面坐标,按照高斯投影正算公式进行。将高斯平面坐标转为大地坐标(B,L),按照高斯投影反算公式进行。

(1)、由大地坐标求高斯平面坐标: 高斯投影坐标正算公式(由L,B求x,y):

NN?23225????x?X?sinBcosBl?sinBcosB(5?t?9?)l?2???224???4? ?NNN32235245?y?????cosBl???cosB(1?t??)l?cosB(5?18t?t)l????6???3120???5?(2)、由高斯平面坐标求大地坐标:

高斯投影坐标反算公式(由x,y求L,B):

3?tftf224y2?(5?3t2?2?B?Bf?f??f?9ftf)y32MfNf24MfNf? ?111223?l?y?(1?2t??)y?(5?284f)y5ff35?NfcosBf6NfcosBf120NfcosBf?

? 大地坐标与空间直角坐标坐标的转换。 (1)、由大地坐标求空间直角坐标:

?X?(N?H)cosBcosL??Y?(N?H)cosBsinL ?Z?[N(1?e2))?H]sinB?(2)、由空间直角坐标求大地坐标:

Y/X)?L?arctan(??Z(N?H)/[X2?Y2(N(1?e2)?H)]} ?B?arctan{?H?Z/sinB?N(1?e2)??式中,N?a/1?e2si2nB,N为该点的卯酉圈曲率半径;

1

e2?(a2?b2)/a2,a、e分别为该大地坐标系对应椭球的长半轴和第一偏心率。

? 空间直角坐标与空间直角坐标的转换。

应用的是布尔莎公式:

?X新?X0?(1?k)X旧??ZY旧??YZ旧??Y新?Y0?(1?k)Y旧??ZX旧??XZ旧 ?Z?Z?(1?k)Z??Y??Z0旧Y旧X旧?新公式存在7个参数:3个平移参数X0,Y0,Z0,3个旋转参数?X,?Y,?Z,1个尺度变化参数k。

2

附1 程序设计界面

3

附2 主要程序代码

// DlgCoord.cpp : implementation file

///////////////////////////////////////////////////////////////////////////// BOOL CDlgCoord::OnInitDialog() { CDialog::OnInitDialog(); m_comOld.SetCurSel(0); //默认椭球类型 m_comNew.SetCurSel(0); CWnd* pWnd; pWnd=GetDlgItem(IDC_COMBO_GEO_T0); pWnd->ShowWindow(SW_HIDE); pWnd=GetDlgItem(IDC_COMBO_GEO_T1); pWnd->ShowWindow(SW_HIDE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }

void CDlgCoord::OnRadioGeoOld() //源 大地坐标 { CWnd* pWnd; pWnd=GetDlgItem(IDC_COMBO_GEO_T0); pWnd->ShowWindow(SW_SHOW); m_comGeoOld.SetCurSel(0); m_strX0=\ //置0 m_strY0=\m_strH0=\ pWnd=GetDlgItem(IDC_STATIC_X0);//标签标题改变 pWnd->SetWindowText(\ pWnd=GetDlgItem(IDC_STATIC_Y0); pWnd->SetWindowText(\

pWnd=GetDlgItem(IDC_STATIC_H0); pWnd->SetWindowText(\}

…… 其余几个单选按钮类似

void CDlgCoord::OnButtonCoordOk() //坐标转换 按钮 { UpdateData();

//高斯正算 大地->平面 if(m_CoordTypeOld==1&&m_CoordTypeNew==2) { if(m_strX0.GetLength()==0||m_strY0.GetLength()==0) {AfxMessageBox(\请输入数据!\ else GaussForward(); } //高斯反算 平面->大地 …… //大地坐标->空间直角坐标 …… //空间直角坐标->大地坐标 …… //空间直角坐标->空间直角坐标 ……

4

}

void CDlgCoord::GaussForward()//高斯正算 { UpdateData(); double B,Bbak,L,l,ll,L0,x,y,cos2B,p2; double N,a0,a4,a6,a3,a5; p2=206264.806247; B=stod(m_strX0); // 化为 秒 L=stod(m_strY0); //化为 秒 Bbak=B; //备份B B=B/p2; //化为弧度值 L0=stod(g_center);//获得中央子午线 // AfxMessageBox(g_center); l=L-L0; //化为 秒 l=l/p2;//化为弧度 ll=l*l; //l相乘 cos2B=cos(B)*cos(B); //国家-80 大地坐标 ->国家-80 高斯平面坐标:高斯投影正算公式 if(m_comOld.GetCurSel()==1&&m_comNew.GetCurSel()==1) { N=6399596.652-(21565.045-(108.996-0.603*cos2B)*cos2B)*cos2B; a0=32144.5189-(135.3646-(0.7034-0.0041*cos2B)*cos2B)*cos2B; a4=(0.25+0.00253*cos2B)*cos2B-0.04167; a6=((0.167*cos2B)-0.083)*cos2B; a3=(0.333333333+0.001123*cos2B)*cos2B-0.1666667; a5=0.00878-(0.1702-0.20382*cos2B)*cos2B; x=6367452.1328*B-(a0-(0.5+(a4+a6*ll)*ll)*ll*N)*sin(B)*cos(B); y=(1.0+(a3+a5*ll)*ll)*l*N*cos(B); m_strX1.Format(\输出 m_strY1.Format(\ } //北京-54 大地坐标 -> 北京-54 高斯平面坐标 :高斯投影反算公式 if(m_comOld.GetCurSel()==0&&m_comNew.GetCurSel()==0) { N=6399698.902-(21562.267-(108.973-0.612*cos2B)*cos2B)*cos2B; a0=32140.404-(135.3302-(0.7092-0.0040*cos2B)*cos2B)*cos2B; a4=(0.25+0.00252*cos2B)*cos2B-0.04166; a6=((0.166*cos2B)-0.084)*cos2B; a3=(0.333333333+0.001123*cos2B)*cos2B-0.1666667; a5=0.0083-(0.1667-(0.1968+0.004*cos2B)*cos2B)*cos2B; x=6367558.4969*B-(a0-(0.5+(a4+a6*ll)*ll)*ll*N)*sin(B)*cos(B); y=(1.0+(a3+a5*ll)*ll)*l*N*cos(B); m_strX1.Format(\ m_strY1.Format(\

} UpdateData(FALSE); }

void CDlgCoord::GaussInverse()//高斯反算 { UpdateData(); double B,l,L,L0,Bf,Bf2,bt,bt2,cos2bt,cos2Bf,Z,Nf,b2,b3,b4,b5,p2; double x,y,h; p2=206264.806247; x=atof(m_strX0); y=atof(m_strY0); h=atof(m_strH0);

5


面向对象程序设计 - 陈士城- 副本.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:社区2010年团总支工作计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: