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

📄 dlgcoordtrans.cpp

📁 GPS坐标转换软件与源程序 支持世界上大多数坐标框架下
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp); 
				tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
				break;
			default://second
				m_dest1=m_dest1*180.0/PI*3600;tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp); 
				m_dest2=m_dest2*180.0/PI*3600;tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
			}
			
			tmp.Format("%f",m_dest3);m_edtdest3.SetWindowText(tmp);
		}
		else
		{
			tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp);		
			tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
			tmp.Format("%f",m_dest3);m_edtdest3.SetWindowText(tmp);
		}
	}
}

void CDlgCoordTrans::PopulateCombo()
{
	//for ellipsoid.
	for (u1 i=0;i<_refellip.size();i++){
		m_cmbSrcEllip.AddString(_refellip.at(i).name_coor);
		m_cmbDestEllip.AddString(_refellip.at(i).name_coor);
	}
	m_cmbSrcEllip.SetCurSel(2);
	m_cmbDestEllip.SetCurSel(2);
	m_SrcEllip = GeoRef::WGS84;
	m_DestEllip = GeoRef::WGS84;
	//for source geodetic coordinates unit
	m_cmbSrcUnit.AddString("dd:mm:ss");
	m_cmbSrcUnit.AddString("dd°mm′ss″");
	m_cmbSrcUnit.AddString("DEG");
	m_cmbSrcUnit.AddString("RADIAN");
	m_cmbSrcUnit.AddString("SECOND");
	m_cmbSrcUnit.SetCurSel((int)m_SrcBLUnit);
	//for destination geodetic coordinates unit;
	m_cmbDestUnit.AddString("dd:mm:ss");
	m_cmbDestUnit.AddString("dd°mm′ss″");
	m_cmbDestUnit.AddString("DEG");
	m_cmbDestUnit.AddString("RADIAN");
	m_cmbDestUnit.AddString("SECOND");
	m_cmbDestUnit.SetCurSel((int)m_SrcBLUnit);
	//Destellipsoid enable is 
	m_cmbDestEllip.EnableWindow((m_chkDatum.GetState()& 0x0003));
}

void CDlgCoordTrans::SetCheckState()
{
	switch(m_SrcCoordType) {
	case 0:
		m_btnSrcCAR.SetCheck(1);m_btnSrcGEO.SetCheck(0);m_btnSrcPLAN.SetCheck(0);
		m_src_label1 ="X";	m_src_label2 ="Y";	m_src_label3 ="Z";
		break;
	case 1:
		m_btnSrcCAR.SetCheck(0);m_btnSrcGEO.SetCheck(1);m_btnSrcPLAN.SetCheck(0);
		m_src_label1 ="B";	m_src_label2 ="L";	m_src_label3 ="H";
		break;
	case 2:
		m_btnSrcCAR.SetCheck(0);m_btnSrcGEO.SetCheck(0);m_btnSrcPLAN.SetCheck(1);
		m_src_label1 ="E";	m_src_label2 ="N";	m_src_label3 ="H";
		break;
	}

	switch(m_DestCoordType){
	case 0:
		m_btnDestCAR.SetCheck(1);m_btnDestGEO.SetCheck(0);m_btnDestPLAN.SetCheck(0);
		m_dest_label1 ="X";	m_dest_label2 ="Y";	m_dest_label3 ="Z";
		break;
	case 1:
		m_btnDestCAR.SetCheck(0);m_btnDestGEO.SetCheck(1);m_btnDestPLAN.SetCheck(0);
		m_dest_label1 ="B";	m_dest_label2 ="L";	m_dest_label3 ="H";
		break;
	case 2:		
		m_btnDestCAR.SetCheck(0);m_btnDestGEO.SetCheck(0);m_btnDestPLAN.SetCheck(1);
		m_dest_label1 ="E";	m_dest_label2 ="N";	m_dest_label3 ="H";
		break;
	}
	UpdateData(FALSE);
}
void CDlgCoordTrans::OnRadSrcCar() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_SrcCoordType=0;
	SetCheckState();
	m_edtSrcZone.EnableWindow(FALSE);
}

void CDlgCoordTrans::OnRadSrcGeo() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_SrcCoordType=1;
	SetCheckState();
	m_edtSrcZone.EnableWindow(FALSE);
}

void CDlgCoordTrans::OnRadSrcPlan() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_SrcCoordType=2;
	SetCheckState();
	m_edtSrcZone.EnableWindow(FALSE);
}

void CDlgCoordTrans::OnRadDestCar() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_DestCoordType=0;
	SetCheckState();
}

void CDlgCoordTrans::OnRadDestGeo() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_DestCoordType=1;
	SetCheckState();
}

void CDlgCoordTrans::OnRadDestPlan() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_DestCoordType=2;
	SetCheckState();
}


void CDlgCoordTrans::OnSelchangeSrcUnit() 
{
	// TODO: Add your control notification handler code here
	int n=m_cmbSrcUnit.GetCurSel();
	if(m_SrcBLUnit != n)
	{
		RetrieveDataFromCtrl(1);
		m_SrcBLUnit = n;
		InitializeDataToCtrl(1);
	}
}

void CDlgCoordTrans::OnSelchangeDestUnit() 
{
	int n=m_cmbDestUnit.GetCurSel();
	if(m_DestBLUnit != n)
	{
		RetrieveDataFromCtrl(2);
		m_DestBLUnit = n;
		InitializeDataToCtrl(2);
	}
}

void CDlgCoordTrans::OnChkDatum() 
{	
	if(_datumtran.model != 0){
		m_bDatumTran = (m_chkDatum.GetState()& 0x0003);
		m_cmbDestEllip.EnableWindow(m_bDatumTran);
		if (m_bDatumTran)
		{
			m_cmbSrcEllip.SetCurSel(_datumtran.srcellip);
			m_cmbDestEllip.SetCurSel(_datumtran.destellip);
		}
	}
	else{
		AfxMessageBox(GetResString(IDS_ALARM_DATUM));
		m_chkDatum.SetCheck(BST_UNCHECKED);
	}
}

void CDlgCoordTrans::OnMenuDatumtrans() 
{
	// TODO: Add your command handler code here
	CDatumTranPara dlg;
	dlg.DoModal();
	//if modify the datum transformation paras.
	if(_bwsmodify){
		m_cmbSrcEllip.SetCurSel(_datumtran.srcellip);
		m_cmbDestEllip.SetCurSel(_datumtran.destellip);
	}
}
void CDlgCoordTrans::OnEllip()
{
	CEllipSoid dlg;
	dlg.DoModal();
}

void CDlgCoordTrans::OnMenuProject() 
{
	// TODO: Add your command handler code here
	CDlgProject dlg;
	if (dlg.DoModal()==IDOK) {
		m_k0=dlg.m_k0;				//set scale factor
		if (m_SrcCoordType == 2) {	//grid to other.must set central meridian and north or south semisphere.
			m_lon0=toRadians(dlg.m_lon0);
			if(fabs(m_lon0)<1e-5){
				AfxMessageBox("You must set central meridian when source coordinates is grid coordinates.");
				return;
			}
			if((m_NorS=dlg.m_NorS) ==0)
			{
				AfxMessageBox("You must point out the point is in Northern semisphere or Southern semisphere.");
				return;
			}
		}
//		else if (m_DestCoordType ==2) {//ecef to grid,lla to grid. needn't set cm, cm can be got from longitude.
//
// 		}
		m_bProject=TRUE;
	}
}


void CDlgCoordTrans::OnFileOpen() 
{
	// TODO: Add your command handler code here
	CString path = theLang.GetDirectory(EXECUTABLEDIR,TRUE);
	CFileDialog dlg(TRUE, _T(".wkp"),path+"shengsir.wkp", NULL,_T("workspace file|*.wkp| All(*.*)|*.*||"), NULL);
	dlg.m_ofn.lpstrTitle="Save workspace";
//	peph.m_ofn.Flags=OFN_READONLY;
	if(dlg.DoModal()==IDOK)
	{
		FILE* fp=fopen(dlg.GetPathName(),"r");
		char chtmp[100];
		ReadLine(fp,chtmp);//Coordinates Translation workspace file
		ReadLine(fp,chtmp);//src
		sscanf(chtmp,"Source Coordinates:%lf,%lf,%lf",&m_src1,&m_src2,&m_src3);
		ReadLine(fp,chtmp);//dest
		sscanf(chtmp,"Destination Coordinates:%lf,%lf,%lf",&m_dest1,&m_dest2,&m_dest3);
		fclose(fp);
		CString tmp;
		tmp.Format("%f",m_src1);m_edtsrc1.SetWindowText(tmp);		
		tmp.Format("%f",m_src2);m_edtsrc2.SetWindowText(tmp);
		tmp.Format("%f",m_src3);m_edtsrc3.SetWindowText(tmp);
		tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp);		
		tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
		tmp.Format("%f",m_dest3);m_edtdest3.SetWindowText(tmp);
		UpdateData(FALSE);
	}	
}

void CDlgCoordTrans::OnFileSave() 
{
	// TODO: Add your command handler code here
	CString path = theLang.GetDirectory(EXECUTABLEDIR,TRUE);
	CFileDialog dlg(FALSE, _T(".wkp"),path+"shengsir.wkp", NULL,_T("workspace file|*.wkp| All(*.*)|*.*||"), NULL);
	dlg.m_ofn.lpstrTitle="Save workspace";
	dlg.m_ofn.Flags |= OFN_OVERWRITEPROMPT;
//	peph.m_ofn.Flags=OFN_READONLY;
	if(dlg.DoModal()==IDOK)
	{
		FILE* fp=fopen(dlg.GetPathName(),"w");

		CString tmp1,tmp2,tmp3;
		//head
		fprintf(fp,"Coordinates Translation workspace file:\n");
		//src coordinates
		m_edtsrc1.GetWindowText(tmp1);
		m_edtsrc2.GetWindowText(tmp2);
		m_edtsrc3.GetWindowText(tmp3);		
		fprintf(fp,"Source Coordinates:%s,%s,%s\n",tmp1,tmp2,tmp3);
		//dest coordinates
		m_edtdest1.GetWindowText(tmp1);
		m_edtdest2.GetWindowText(tmp2);
		m_edtdest3.GetWindowText(tmp3);
		fprintf(fp,"Destination Coordinates:%s,%s,%s\n",tmp1,tmp2,tmp3);
		//datum transformation parameters.
		if(_datumtran.model != 0)
			//in form: Datum Transformation=modelID,srcellip,destellip,factor,tx,ty,tz,wx,wy,wz
			fprintf(fp,"Datum Transformation=%d,%d,%d,%f,%f,%f,%f,%f,%f,%f\n",
				_datumtran.model,_datumtran.srcellip,_datumtran.destellip,_datumtran.factor,
				_datumtran.tx,_datumtran.ty,_datumtran.tz,
				_datumtran.wx,_datumtran.wy,_datumtran.wz);
		//ellipsoid parameters.

		//coordinates types.

		//language id;
		fprintf(fp,"LanguageID=%d\n",theLang.GetLanguageID());
		fclose(fp);	
		_bwsmodify = FALSE;
	}	
}

void CDlgCoordTrans::OnDataExchange() 
{
	UpdateData(TRUE);
	//evaluation
//	RetrieveDataFromCtrl();	
	int n1,n2;
	//exchange data type;
	n1=m_SrcCoordType;
	m_SrcCoordType=m_DestCoordType;
	m_DestCoordType=n1;
	SetCheckState();
	if(m_SrcCoordType == 1 || m_DestCoordType==1){
		n1 = m_cmbDestUnit.GetCurSel();
		n2 = m_cmbSrcUnit.GetCurSel();
		m_cmbSrcUnit.SetCurSel(n1);
		m_cmbDestUnit.SetCurSel(n2);
	}

	CString str1,str2;
	m_edtsrc1.GetWindowText(str1);	m_edtdest1.GetWindowText(str2);
	m_edtsrc1.SetWindowText(str2);	m_edtdest1.SetWindowText(str1);

	m_edtsrc2.GetWindowText(str1);	m_edtdest2.GetWindowText(str2);
	m_edtsrc2.SetWindowText(str2);	m_edtdest2.SetWindowText(str1);
	
	m_edtsrc3.GetWindowText(str1);	m_edtdest3.GetWindowText(str2);
	m_edtsrc3.SetWindowText(str2);	m_edtdest3.SetWindowText(str1);
	

}

void CDlgCoordTrans::OnLangzhCN()
{
	WORD wNewLang = (WORD)LANGID_ZH_CN;
	if (theLang.GetLanguageID() != wNewLang){
		if	(!theLang.IsLanguageSupported(wNewLang, false)){//the language is not supported.
			AfxMessageBox(GetResString(IDS_LANG_NOTSUPPORTED));
			return;
		}
		else{
			theLang.SetLanguageID(wNewLang);
			theLang.SetLanguage();
		}
			Localize();
	}
}

void CDlgCoordTrans::OnLangEn()
{
	WORD wNewLang = (WORD)LANGID_EN_US;
	if (theLang.GetLanguageID() != wNewLang){
		if	(!theLang.IsLanguageSupported(wNewLang, false)){//the language is not supported.
			AfxMessageBox(GetResString(IDS_LANG_NOTSUPPORTED));
			return;
		}
		else{
			theLang.SetLanguageID(wNewLang);
			theLang.SetLanguage();
		}
		Localize();
	}
}

void CDlgCoordTrans::Localize(u1 flag){
	
	SetWindowText(GetResString(IDS_DLG_COORDTRANS));
	GetDlgItem(IDC_SRC_COORDTYPE)->SetWindowText(GetResString(IDS_SRC_COORDTYPE));
	GetDlgItem(IDC_DEST_COORDTYPE)->SetWindowText(GetResString(IDS_DEST_COORDTYPE));
	GetDlgItem(IDC_RAD_SRC_CAR)->SetWindowText(GetResString(IDS_ECEF));
	GetDlgItem(IDC_RAD_DEST_CAR)->SetWindowText(GetResString(IDS_ECEF));
	GetDlgItem(IDC_RAD_SRC_GEO)->SetWindowText(GetResString(IDS_GEO));
	GetDlgItem(IDC_RAD_DEST_GEO)->SetWindowText(GetResString(IDS_GEO));
	GetDlgItem(IDC_RAD_SRC_PLAN)->SetWindowText(GetResString(IDS_GRID));
	GetDlgItem(IDC_RAD_DEST_PLAN)->SetWindowText(GetResString(IDS_GRID));
	GetDlgItem(IDC_SRCZONE)->SetWindowText(GetResString(IDS_ZONE));
	GetDlgItem(IDC_DESTZONE)->SetWindowText(GetResString(IDS_ZONE));

	GetDlgItem(IDC_CHK_DATUM)->SetWindowText(GetResString(IDS_DATUMTRAN));
	GetDlgItem(IDC_SRCELLIP)->SetWindowText(GetResString(IDS_ELLIPSOID));
	GetDlgItem(IDC_DESTELLIP)->SetWindowText(GetResString(IDS_ELLIPSOID));

	GetDlgItem(IDB_TRANSFORM)->SetWindowText(GetResString(IDS_TRANSFORM));
	GetDlgItem(IDB_EXCHANGE)->SetWindowText(GetResString(IDS_EXCHANGE));
	GetDlgItem(IDCANCEL)->SetWindowText(GetResString(IDS_CANCEL));
	GetDlgItem(IDC_SRCCOORD)->SetWindowText(GetResString(IDS_SRCCOORD));
	GetDlgItem(IDC_DESTCOORD)->SetWindowText(GetResString(IDS_DESTCOORD));

	//menu
	CMenu* pMenu,*pSubMenu;
	pMenu = GetMenu();
	//for menu and each submenu;
	pMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pMenu->GetMenuItemID(0),GetResString(IDS_FILE));
	pMenu->ModifyMenu(1,MF_STRING|MF_BYPOSITION,pMenu->GetMenuItemID(1),GetResString(IDS_SET));
	pMenu->ModifyMenu(2,MF_STRING|MF_BYPOSITION,pMenu->GetMenuItemID(2),GetResString(IDS_LANGUAGE));
	pMenu->ModifyMenu(3,MF_STRING|MF_BYPOSITION,pMenu->GetMenuItemID(3),GetResString(IDS_ABOUT));
	//submenu file
	pSubMenu = pMenu->GetSubMenu(0);
	pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(0),GetResString(IDS_FILEOPEN));
	pSubMenu->ModifyMenu(1,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(1),GetResString(IDS_FILESAVE));

	//submenu set
	pSubMenu = pMenu->GetSubMenu(1);
	pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(0),GetResString(IDS_PROJECTION));
	pSubMenu->ModifyMenu(1,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(1),GetResString(IDS_ELLIPSOID));
	pSubMenu->ModifyMenu(2,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(2),GetResString(IDS_CALDATUMPARA));
	
	//submenu language
	pSubMenu = pMenu->GetSubMenu(2);
	pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(0),GetResString(IDS_ZHCN));
	pSubMenu->ModifyMenu(1,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(1),GetResString(IDS_EN));
	
	//submenu about

⌨️ 快捷键说明

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