⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog3.cpp

📁 用visual c++实现地理信息系统中常用的投影
💻 CPP
字号:
// DIALOG3.cpp : implementation file
//

#include "stdafx.h"
#include "Projection.h"
#include "DIALOG3.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define p0    57.29577951308232

/////////////////////////////////////////////////////////////////////////////
// CDIALOG3 dialog


CDIALOG3::CDIALOG3(CWnd* pParent /*=NULL*/)
	: CDialog(CDIALOG3::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDIALOG3)
	m_B1d = 0.0;
	m_B1m = 0.0;
	m_B1s = 0.0;
	m_B2d = 0.0;
	m_L0d = 0.0;
	m_L0m = 0.0;
	m_L0s = 0.0;
	m_L1d = 0.0;
	m_L1m = 0.0;
	m_L1s = 0.0;
	m_L2d = 0.0;
	m_L2m = 0.0;
	m_L2s = 0.0;
	m_X1 = 0.0;
	m_X2 = 0.0;
	m_Y1 = 0.0;
	m_Y2 = 0.0;
	m_Type = -1;
	m_B2s = 0.0;
	m_B2m = 0.0;
	m_Coordinate = -1;
	m_fh1 = 0.0;
	m_fh2 = 0.0;
	m_zH1 = 0.0;
	m_zh2 = 0.0;
	//}}AFX_DATA_INIT
}


void CDIALOG3::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDIALOG3)
	DDX_Control(pDX, IDC_EDIT_zh2, m_zh2_C);
	DDX_Control(pDX, IDC_EDIT_zH1, m_zH1_C);
	DDX_Control(pDX, IDC_EDIT_fh2, m_fh2_C);
	DDX_Control(pDX, IDC_EDIT_fh1, m_fh1_C);
	DDX_Control(pDX, IDC_EDIT_B2m, m_B2m_C);
	DDX_Control(pDX, IDC_EDIT_Y2, m_Y2_C);
	DDX_Control(pDX, IDC_EDIT_Y1, m_Y1_C);
	DDX_Control(pDX, IDC_EDIT_X2, m_X2_C);
	DDX_Control(pDX, IDC_EDIT_X1, m_X1_C);
	DDX_Control(pDX, IDC_EDIT_L2s, m_L2s_C);
	DDX_Control(pDX, IDC_EDIT_L2m, m_L2m_C);
	DDX_Control(pDX, IDC_EDIT_L2d, m_L2d_C);
	DDX_Control(pDX, IDC_EDIT_L1s, m_L1s_C);
	DDX_Control(pDX, IDC_EDIT_L1m, m_L1m_C);
	DDX_Control(pDX, IDC_EDIT_L1d, m_L1d_C);
	DDX_Control(pDX, IDC_EDIT_B2s, m_B2s_C);
	DDX_Control(pDX, IDC_EDIT_B2d, m_B2d_C);
	DDX_Control(pDX, IDC_EDIT_B1s, m_B1s_C);
	DDX_Control(pDX, IDC_EDIT_B1m, m_B1m_C);
	DDX_Control(pDX, IDC_EDIT_B1d, m_B1d_C);
	DDX_Text(pDX, IDC_EDIT_B1d, m_B1d);
	DDX_Text(pDX, IDC_EDIT_B1m, m_B1m);
	DDX_Text(pDX, IDC_EDIT_B1s, m_B1s);
	DDX_Text(pDX, IDC_EDIT_B2d, m_B2d);
	DDX_Text(pDX, IDC_EDIT_L0d, m_L0d);
	DDX_Text(pDX, IDC_EDIT_L0m, m_L0m);
	DDX_Text(pDX, IDC_EDIT_L0s, m_L0s);
	DDX_Text(pDX, IDC_EDIT_L1d, m_L1d);
	DDX_Text(pDX, IDC_EDIT_L1m, m_L1m);
	DDX_Text(pDX, IDC_EDIT_L1s, m_L1s);
	DDX_Text(pDX, IDC_EDIT_L2d, m_L2d);
	DDX_Text(pDX, IDC_EDIT_L2m, m_L2m);
	DDX_Text(pDX, IDC_EDIT_L2s, m_L2s);
	DDX_Text(pDX, IDC_EDIT_X1, m_X1);
	DDX_Text(pDX, IDC_EDIT_X2, m_X2);
	DDX_Text(pDX, IDC_EDIT_Y1, m_Y1);
	DDX_Text(pDX, IDC_EDIT_Y2, m_Y2);
	DDX_Radio(pDX, IDC_RADIO4, m_Type);
	DDX_Text(pDX, IDC_EDIT_B2s, m_B2s);
	DDX_Text(pDX, IDC_EDIT_B2m, m_B2m);
	DDX_Radio(pDX, IDC_RADIO1, m_Coordinate);
	DDX_Text(pDX, IDC_EDIT_fh1, m_fh1);
	DDX_Text(pDX, IDC_EDIT_fh2, m_fh2);
	DDX_Text(pDX, IDC_EDIT_zH1, m_zH1);
	DDX_Text(pDX, IDC_EDIT_zh2, m_zh2);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDIALOG3, CDialog)
	//{{AFX_MSG_MAP(CDIALOG3)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
	ON_BN_CLICKED(IDC_RADIO5, OnRadio5)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDIALOG3 message handlers

void CDIALOG3::OnButton1()    //正算
{
	// TODO: Add your control notification handler code here
	UpdateData();
		
	//高斯正算公式
	double pi=3.1415926/180;
	double t,N,v,l0,k,B1,L1,L0,X;
	B1=m_B1d+m_B1m/60+m_B1s/3600;                                                                                               
	L1=m_L1d+m_L1m/60+m_L1s/3600;
	L0=m_L0d+m_L0m/60+m_L0s/3600;

    a0=a*(1-E)*(1+3/4.0*E+45/64.0*pow(E,2)+350/512.0*pow(E,3)+11025/16384.0*pow(E,4));
    a2=-1/2.0*a*(1-E)*(3/4.0*E+60/64.0*pow(E,2)+525/512.0*pow(E,3)+17640/16384.0*pow(E,4));
    a4=1/4.0*a*(1-E)*(15/64.0*pow(E,2)+210/512.0*pow(E,3)+8820/16384.0*pow(E,4));
	a6=-1*1/6.0*a*(1-E)*(35/512.0*pow(E,3)+2520/16384.0*pow(E,4));
	a8=1/8.0*a*(1-E)*(315/16384.0*pow(E,4));

    B1=B1*pi;
	t=tan( B1);
	k=E1*cos( B1)*cos( B1);
	v=1+k;                                             
	N=c/sqrt(v);
	l0=L1-L0;
	p=cos( B1)*l0/p0;
	X=a0*B1+a2*sin(2*B1)+a4*sin(4*B1)+a6*sin(6*B1)+a8*sin(8*B1);
	m_X1=X+N*t*(1+((5-t*t+(9+4*k)*k)+((61+(t*t-58)*t*t+(9-11*t*t)*30*k)+(1385+(-3111+(543-t*t)*t*t)*t*t)*p*p/56)*p*p/30)*p*p/12)*p*p/2;
	m_Y1=500000+N*(1+((1-t*t+k)+((5+t*t*(t*t-18-58*k)+14*k)+(61+(-479+(179-t*t)*t*t)*t*t)*p*p/42)*p*p/20)*p*p/6)*p;
    m_zh2=m_zH1;
    
	UpdateData(false);



}

void CDIALOG3::OnButton2()     //反算
{
	// TODO: Add your control notification handler code here
	double tf,Nf,vf,Y,q,Bf,k,B0,l0,B,L,L0;
	double pi=3.1415926/180;
	UpdateData();
    
	q0=1.0/a0;
	q2=1.0/2*(3.0/4*pow(E,1)+45.0/64*pow(E,2)+350.0/512*pow(E,3)+11025.0/16384*pow(E,4));
	q4=-1.0/3*(63.0/64*pow(E,2)+1108.0/512*pow(E,3)+58239.0/16384*pow(E,4));
	q6=1.0/3*(604.0/512*pow(E,3)+68484.0/16384*pow(E,4));
    q8=-1.0/3*(26328.0/16384*pow(E,4)); 

	L0=m_L0d+m_L0m/60+m_L0s/3600;	
	B0=m_X2*q0;
	Bf=B0+sin(2*B0)*(q2+sin(B0)*sin(B0)*(q4+sin(B0)*sin(B0)*(q6+q8*sin(B0)*sin(B0))));
	Y=m_Y2-500000;
	tf=tan(Bf);
	k=E1*cos(Bf)*cos(Bf);
	vf=1+k;
	Nf=c/sqrt(vf);
	q=Y/Nf;
	B=Bf/pi+p0*tf*(-vf+((5+3*tf*tf*(1+(-2-3*k)*k)+3*k*(2-k))+(-(61+45*tf*tf*(2+tf*tf)+(107+(-162-45*tf*tf)*tf*tf)*k)+(1385+(3633+(4095+1575*tf*tf)*tf*tf)*tf*tf)*q*q/56)*q*q/30)*q*q/12)*q*q/2;
	
	m_B2d=int (B);	
	m_B2m=int( (B-int(B))*60);
	m_B2s=int (((B-int(B))*60-m_B2m)*60);

	l0=p0*q/cos(Bf)*(1+(-(1+2*tf*tf+k)+((5+4*tf*tf*(7+6*tf*tf)+2*k*(3+4*tf*tf))-(61+(662+(1320+720*tf*tf)*tf*tf)*tf*tf)*q*q/42)*q*q/20)*q*q/6);
	L=L0+l0;
	
	m_L2d=int(L);
	m_L2m=int( (L-int(L))*60);	
	m_L2s=int (((L-int(L))*60-m_L2m)*60);

	m_fh2=m_fh1;

	UpdateData(false);	
	
}

void CDIALOG3::OnRadio1() 
{
	// TODO: Add your control notification handler code here
	m_Coordinate=1;

	a=6378245;	
    E=0.006693427491;
   	E1=6.738525414683E-03;
    c=6399698.901782711;
 
}

void CDIALOG3::OnRadio2() 
{
	// TODO: Add your control notification handler code here
	m_Coordinate=2;
	
	a=6378140;
	E=6.694384999588E-03;
	c=6399596.6519880105;
	E1=6.739501819473E-03;
}


void CDIALOG3::OnRadio3() 
{
	// TODO: Add your control notification handler code here
	m_Coordinate=3;
	a=6378137;
	E=6.6943799013E-03;
	c=6399593.6258;
	E1=6.73949674227E-03;
	
}


void CDIALOG3::OnRadio4()  //正算
{
	// TODO: Add your control notification handler code here
    m_B1d=m_B1m=m_B1s=0;
	m_L1d=m_L1m=m_L1s=0;
	m_B2d=m_B2m=m_B2s=0;
	m_L2d=m_L2m=m_L2s=0;
    m_zH1=m_zh2=0;

	m_L1d_C.EnableWindow(true);
	m_L1m_C.EnableWindow(true);
	m_L1s_C.EnableWindow(true);
	m_B1d_C.EnableWindow(true);
	m_B1m_C.EnableWindow(true);
	m_B1s_C.EnableWindow(true);
    m_zH1_C.EnableWindow(true);
	m_zh2_C.EnableWindow(true);
	m_X1_C.EnableWindow(true);
	m_Y1_C.EnableWindow(true);

	m_L2d_C.EnableWindow(false);
	m_L2m_C.EnableWindow(false);
	m_L2s_C.EnableWindow(false);
	m_B2d_C.EnableWindow(false);
	m_B2m_C.EnableWindow(false);
	m_B2s_C.EnableWindow(false);
	m_X2_C.EnableWindow(false);
	m_Y2_C.EnableWindow(false);
	m_fh1_C.EnableWindow(false);
    m_fh2_C.EnableWindow(false);

}


void CDIALOG3::OnRadio5() 
{
	// TODO: Add your control notification handler code here
	m_B1d=m_B1m=m_B1s=0;
	m_L1d=m_L1m=m_L1s=0;
	m_B2d=m_B2m=m_B2s=0;
	m_L2d=m_L2m=m_L2s=0;
	m_fh1=m_fh2=0;

	m_L2d_C.EnableWindow(true);
	m_L2m_C.EnableWindow(true);
	m_L2s_C.EnableWindow(true);
	m_B2d_C.EnableWindow(true);
	m_B2m_C.EnableWindow(true);
	m_B2s_C.EnableWindow(true);
	m_X2_C.EnableWindow(true);
	m_Y2_C.EnableWindow(true);
	m_fh1_C.EnableWindow(true);
    m_fh2_C.EnableWindow(true);

	m_L1d_C.EnableWindow(false);
	m_L1m_C.EnableWindow(false);
	m_L1s_C.EnableWindow(false);
	m_B1d_C.EnableWindow(false);
	m_B1m_C.EnableWindow(false);
	m_B1s_C.EnableWindow(false);
	m_zH1_C.EnableWindow(false);
	m_zh2_C.EnableWindow(false);
	m_X1_C.EnableWindow(false);
	m_Y1_C.EnableWindow(false);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -