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

📄 caltuhaolat.cpp

📁 能够实现一些常用的地图转换
💻 CPP
字号:
// Caltuhaolat.cpp : implementation file
//

#include "stdafx.h"
#include "CalSurBase.h"
#include "Caltuhaolat.h"
#include "Survey.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCaltuhaolat dialog


CCaltuhaolat::CCaltuhaolat(CWnd* pParent /*=NULL*/)
	: CDialog(CCaltuhaolat::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCaltuhaolat)
	m_geo = -1;
	m_thmap = -1;
	m_zbx = -1;
	//}}AFX_DATA_INIT
}


void CCaltuhaolat::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCaltuhaolat)
	DDX_Control(pDX, IDC_COMBO_MERI, m_meri);
	DDX_Control(pDX, IDC_COMBO_BLC, m_blc);
	DDX_Control(pDX, IDC_MSFLEXGRID_DATA, m_griddata);
	DDX_Control(pDX, IDC_MSFLEXGRID_TH, m_gridth);
	DDX_Radio(pDX, IDC_RADIO_GEOA, m_geo);
	DDX_Radio(pDX, IDC_RADIO_OLD, m_thmap);
	DDX_Radio(pDX, IDC_RADIO_ZBX54, m_zbx);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCaltuhaolat, CDialog)
	//{{AFX_MSG_MAP(CCaltuhaolat)
	ON_BN_CLICKED(ID_CLEARDATA, OnCleardata)
	ON_BN_CLICKED(ID_SAVEDATA, OnSavedata)
	ON_BN_CLICKED(IDC_RADIO_GEOA, OnRadioGeoa)
	ON_BN_CLICKED(IDC_RADIO_GEOB, OnRadioGeob)
	ON_BN_CLICKED(IDC_RADIO_OLD, OnRadioOld)
	ON_BN_CLICKED(IDC_RADIO_NEW, OnRadioNew)
	ON_BN_CLICKED(IDC_RADIO_ZBX54, OnRadioZbx54)
	ON_BN_CLICKED(IDC_RADIO_ZBX80, OnRadioZbx80)
	ON_BN_CLICKED(ID_INPUTDATA, OnInputdata)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCaltuhaolat message handlers

BOOL CCaltuhaolat::OnInitDialog() 
{
	CDialog::OnInitDialog();
	m_geo=0;
	m_zbx=0;
	m_thmap=0;
    CString StrTxt;
    m_griddata.SetCol(0);
	m_griddata.SetRow(0);
	StrTxt = "< 点号 >|<      坐标X     >|<      坐标Y      >";
    m_griddata.SetFormatString(StrTxt);
	m_griddata.Refresh();
    m_gridth.SetCol(0);
	m_gridth.SetRow(0);
	StrTxt = "< 点号 >|<       图   号       >";
    m_gridth.SetFormatString(StrTxt);
	m_gridth.Refresh();

	m_blc.AddString("100万"); // 0
	m_blc.AddString("50万");  // 1
	m_blc.AddString("25万");  // 2
	m_blc.AddString("10万");  // 3
	m_blc.AddString("5万");   // 4
	m_blc.AddString("2.5万"); // 5
	m_blc.AddString("1万");   // 6
	m_blc.AddString("5千");   // 7
	m_blc.SetCurSel(4);

	CString stradd;
	for(int i = 1;i<= 60;i++)
	{
		stradd.Format("%i",3*i);
		m_meri.AddString(stradd);
	}
	m_meri.SetCurSel(42);

	//m_cmdok.EnableWindow(false);
	UpdateData(false);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CCaltuhaolat::OnCleardata() 
{
	m_griddata.Clear();
	m_gridth.Clear();
	CString StrTxt;
	m_griddata.SetCol(0);
	m_griddata.SetRow(0);
	if(m_geo==0)
	{
		StrTxt = "< 点号 >|<     坐标X     >|<      坐标Y     >";
	}
	else
	{
        StrTxt = "< 点号 >|<     经  度    >|<      纬  度    >";
	}
	m_griddata.SetFormatString(StrTxt);
	m_griddata.Refresh();
    m_gridth.SetCol(0);
	m_gridth.SetRow(0);
	StrTxt = "< 点号 >|<     图   号     >";
    m_gridth.SetFormatString(StrTxt);
	m_gridth.Refresh();	
}

void CCaltuhaolat::OnOK() 
{
	CString stroldtf;
	CString strnewtf;
	CString strtext;
	CSurvey survey;
	double dwj,dlj;double dgdw,dgdj;
	UpdateData(true);
	int sel = m_blc.GetCurSel();
	for(long j=1;j<m_griddata.GetRows();j++)
	{
		m_griddata.SetRow(j);
		m_griddata.SetCol(1);
		dgdw=atof(m_griddata.GetText());
		m_griddata.SetCol(2);
		dgdj=atof(m_griddata.GetText());
		if(m_geo==0)
		{  //将大地坐标转换地理坐标
			survey.GetSysDat(m_zbx+1);
			survey.dsetx=dgdw;
			survey.dsety=dgdj;
			if(survey.dsety>1000000)
			{
				survey.GetFdh();   //根据带号计算中央子午线
				survey.dudai=3;
				survey.dsety=survey.dsety -survey.fdh*1000000;
			}
			else
			{
				m_meri.GetLBText(m_meri.GetCurSel(),strtext);
				survey.dmerl=atoi(strtext);
				survey.fdh=survey.dmerl/3;
				survey.dudai =3;
			}
			survey.XyToBl();
			dgdw=survey.dgetbl_l;
			dgdj=survey.dgetbl_b;
		}
		dwj=survey.Deg(dgdw);
		dlj=survey.Deg(dgdj);
		if(dwj==0||dlj==0)
			break;
		if(sel>=1&&sel<=2)
		{
			stroldtf=survey.GetThCalLat(dwj,dlj,sel);
		}
		else if(sel>=4&&sel<=5)
		{
			stroldtf=survey.GetThCalLatEF(dwj,dlj,sel);
		}
		else
		{
         	stroldtf=survey.GetThCalLatADGH(dwj,dlj,sel);
		}
		stroldtf.MakeUpper();
		strnewtf=survey.GetNewtfFormOldtf(stroldtf);
		m_gridth.SetRow(j);
		m_gridth.SetCol(0);
		m_griddata.SetCol(0);
		m_gridth.SetText(m_griddata.GetText());
		m_gridth.SetCol(1);
		if(m_thmap==0)
		{		m_gridth.SetText(stroldtf);}
		else
		{		m_gridth.SetText(strnewtf);}
	}
	//CDialog::OnOK();
}

void CCaltuhaolat::OnSavedata() 
{
	UpdateData(true);
	CString strport;
	CString strgd;
    CString strfilename;
	CStdioFile n_File;
	CFileDialog gldOpenFile(true,"*.*",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|",NULL);
	gldOpenFile.DoModal();
    strfilename=gldOpenFile.GetPathName();
	//-------------------------------------------
	CFileException e;
	if(!n_File.Open(strfilename,CFile::modeCreate | CFile::modeWrite,&e)) 
	{
		return;
	}

	for(long k=1;k<m_griddata.GetRows();k++)
	{
		m_griddata.SetRow(k);
		m_griddata.SetCol(0);
		
		strport.Format("%10s",m_griddata.GetText());
		if(m_griddata.GetText().IsEmpty()) {break;}
        strgd=strport;
		for(long j=1;j<m_griddata.GetCols();j++)
		{
			m_griddata.SetCol(j);
			strport.Format("%15s",m_griddata.GetText());
			strgd=strgd+strport;
		}
		m_gridth.SetRow(k);
		m_gridth.SetCol(1);
		strport.Format("%18s",m_gridth.GetText());
		strgd=strgd+strport;
		strgd+="\n";
		n_File.WriteString(strgd);
		//break;
	}
	n_File.Close();
    ShellExecute(::GetDesktopWindow(), _T("open"), strfilename, NULL, NULL, SW_NORMAL);	
}

void CCaltuhaolat::OnRadioGeoa() 
{
    CString StrTxt;
    m_griddata.SetCol(0);
	m_griddata.SetRow(0);
	StrTxt = "< 点号 >|<       坐标X     >|<      坐标Y      >";
    m_griddata.SetFormatString(StrTxt);
	m_griddata.Refresh();	
}

void CCaltuhaolat::OnRadioGeob() 
{
    CString StrTxt;
    m_griddata.SetCol(0);
	m_griddata.SetRow(0);
	StrTxt = "< 点号 >|<       经  度     >|<      纬  度     >";
    m_griddata.SetFormatString(StrTxt);
	m_griddata.Refresh();		
}

void CCaltuhaolat::OnRadioOld() 
{
	OnOK();
	
}

void CCaltuhaolat::OnRadioNew() 
{
	OnOK();
	
}

void CCaltuhaolat::OnRadioZbx54() 
{
	OnOK();
	
}

void CCaltuhaolat::OnRadioZbx80() 
{
	OnOK();
	
}

BEGIN_EVENTSINK_MAP(CCaltuhaolat, CDialog)
    //{{AFX_EVENTSINK_MAP(CCaltuhaolat)
	ON_EVENT(CCaltuhaolat, IDC_MSFLEXGRID_DATA, -603 /* KeyPress */, OnKeyPressMsflexgridData, VTS_PI2)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CCaltuhaolat::OnKeyPressMsflexgridData(short FAR* KeyAscii) 
{
	CString getdata;CString strport;
	getdata=m_griddata.GetText();
	getdata.TrimLeft();
    getdata.TrimRight();
	if(*KeyAscii==8)
	{
        strport=getdata.Left(getdata.GetLength()-1);
		m_griddata.SetText(strport);
	}
    else if(*KeyAscii==32)
	{
		long scol=0;
		scol=m_griddata.GetCol();
		if(scol>=2)
		{
            m_griddata.SetRow(m_griddata.GetRow()+1);
			m_griddata.SetCol(0);
		}
		else
		{
		    m_griddata.SetCol(scol+1);
		}
	}
	else
	{
		strport.Format("%c",*KeyAscii);
		getdata=getdata+strport;
		m_griddata.SetText(getdata);
	}		
}

void CCaltuhaolat::OnInputdata() 
{
    CString strfilename;
	CStdioFile n_File;
	CFileDialog gldOpenFile(true,"*.*",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|",NULL);
	gldOpenFile.DoModal();
    strfilename=gldOpenFile.GetPathName();
	//-------------------------------------------
	CFileException e;
	if(!n_File.Open(strfilename,CFile::modeRead,&e)) 
	{		return;	}
	CString cstrLine;
	CString strgd;
	n_File.ReadString(cstrLine);
	strgd=cstrLine.Left(4);
	strgd.TrimLeft();strgd.TrimRight();
	int setj=0;
	int colnum=0;
	if(strgd=="@XY")
	{
		while(n_File.ReadString(cstrLine)!=false)
		{
			cstrLine.TrimLeft(); cstrLine.TrimRight();
			if(cstrLine.IsEmpty())  {  continue; }
			colnum=colnum+1;
			if(colnum>=m_griddata.GetRows())
			{
				m_griddata.SetRows(colnum+100);
				m_gridth.SetRows(colnum+100);
				//AfxMessageBox("错误!文件长度超过100行");
				//return;
			}
			
			setj=cstrLine.Find(' ');
			strgd=cstrLine.Left(setj);
			strgd.TrimLeft();strgd.TrimRight();
			m_griddata.SetRow(colnum);
			m_griddata.SetCol(0);
			m_griddata.SetText(strgd);
			strgd=cstrLine.Right(cstrLine.GetLength()-setj);
			strgd.TrimLeft();strgd.TrimRight();
			cstrLine=strgd;
			setj=cstrLine.Find(' ');
			strgd=cstrLine.Left(setj);
			strgd.TrimLeft();strgd.TrimRight();
			m_griddata.SetCol(1);
			m_griddata.SetText(strgd);
			strgd=cstrLine.Right(cstrLine.GetLength()-setj);
			strgd.TrimLeft();strgd.TrimRight();
			m_griddata.SetCol(2);
			m_griddata.SetText(strgd);
		}
	}
	else
	{
		AfxMessageBox("文件错误!");
		return;
	}
}

⌨️ 快捷键说明

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