📄 magneticdatatomapgisdialog.cpp
字号:
// MagneticDataToMapGisDialog.cpp : implementation file
//
#include "stdafx.h"
#include "MagneticPro.h"
#include "MagneticDataToMapGisDialog.h"
#include "ChildFrm.h"
#include "MagneticProDoc.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMagneticDataToMapGisDialog dialog
CMagneticDataToMapGisDialog::CMagneticDataToMapGisDialog(CWnd* pParent /*=NULL*/)
: CDialog(CMagneticDataToMapGisDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CMagneticDataToMapGisDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
//mPointNum=0;
// MMAX=57000.0;
// MMIN=56000.0;
}
void CMagneticDataToMapGisDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMagneticDataToMapGisDialog)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMagneticDataToMapGisDialog, CDialog)
//{{AFX_MSG_MAP(CMagneticDataToMapGisDialog)
ON_BN_CLICKED(IDC_OPEN_MAGNETIC_DATA, OnOpenMagneticData)
ON_BN_CLICKED(IDC_SAVE_MAPGIS_MM, OnSaveMapgisMm)
ON_BN_CLICKED(IDC_SAVE_SURFER_DAT, OnSaveSurferDat)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMagneticDataToMapGisDialog message handlers
////////////////////////////////////////////////////////////////////////////
/// 打开多个数据文件(zat)读取至结构体数据中///////////////////////////////
////////////////////////////////////////////////////////////////////////////
void CMagneticDataToMapGisDialog::OnOpenMagneticData()
{
// TODO: Add your control notification handler code here
//UpdateData(TRUE);
iLineNum=0;
// GpsPN=0;
int nMonth=4,nDay=19;
int nHour=0,nMinute=0,nSecond=0;
POSITION pos; //用于记录打开文件位置
CString filename;
char szFilters[]=
"MyType Files (*.zat)|*.zat|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE,_T("zat"),_T("*.zat"),
OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,
szFilters,0);
dlg.m_ofn.lpstrFile=filename.GetBuffer(240*(_MAX_PATH+1)+1);
dlg.m_ofn.lpstrInitialDir="D:\\DATA2";
dlg.m_ofn.nMaxFile=240*(_MAX_PATH+1)+1;
if(dlg.DoModal())
{
CStdioFile *pFile=new CStdioFile;
CString strTemp="",str1,str2;
int iLong=20,iPath=0;
pos=dlg.GetStartPosition();
strTemp=dlg.GetPathName(); //获得路径名称
str1=dlg.GetNextPathName(pos); //获得第一个文件名
iPath=strTemp.GetLength()+1; //获取路径长度
while((iLong>15)&&(iLineNum<151) ) //打开文件循环
{
iLong=str1.GetLength();
str2=str1.Right(iLong-iPath);
int j=0;
pFile->Open(str2,CFile::modeRead); // 打开文件指针
pFile->ReadString(strTemp);
LMData[iLineNum].mPointNum=atoi(strTemp);
for(int i=0;i<LMData[iLineNum].mPointNum;i++)
{
pFile->ReadString(strTemp);
str1=strTemp.Right(53);
LMData[iLineNum].m_MData[i].x=atoi(str1.Left(7))/50.0;
str1=strTemp.Right(39);
LMData[iLineNum].m_MData[i].y=atoi(str1.Left(8))/50.0;
str1=strTemp.Right(24);
LMData[iLineNum].m_MData[i].mData=atof(str1.Left(8));
str1=strTemp.Right(9);
nSecond=atoi(str1.Right(3));
nHour=atoi(str1.Left(2));
nMinute=atoi(str1.Mid(3,2));
CTime TTime(2006,nMonth,nDay,nHour,nMinute,nSecond);
LMData[iLineNum].m_MData[i].mTime=TTime;
LMData[iLineNum].LineID=iLineNum;
}
pFile->Close();
iLineNum++;
try
{
str1=dlg.GetNextPathName(pos);
}
catch(...)
{
str1="12";
}
iLong=str1.GetLength();
}
}
}
////////////////////////////////////////////////////////////////////////////
/// 保存为明码文件,为MAPGIS提供剖面图接口 ////////
////////////////////////////////////////////////////////////////////////////
void CMagneticDataToMapGisDialog::OnSaveMapgisMm()
{
// TODO: you Addr control notification handler code here
CString filename;
char szFilters[]=
"MyType Files (*.wal)|*.wal|All Files (*.*)|*.*||";
CFileDialog dlg(FALSE,_T("wal"),_T("*.wal"),
OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_OVERWRITEPROMPT,
szFilters,0);
dlg.m_ofn.lpstrFile=filename.GetBuffer(240*(_MAX_PATH+1)+1);
dlg.m_ofn.lpstrInitialDir="D:\\DATA";
dlg.m_ofn.nMaxFile=240;
if (dlg.DoModal())
{
CStdioFile *pFile=new CStdioFile;
CString strTemp="",str1,str2;
int iLong=40;
double dDisatance=0.0;
strTemp=dlg.GetFileName();
if(strTemp=="")
{
::AfxMessageBox("Filename is empty!");
}
else
{
try
{
pFile->Open(dlg.GetFileName(),CFile::modeWrite | CFile::modeCreate); // 打开文件指针
pFile->WriteString("WMAP9021\n");
str1.Format("%d",iLineNum);
str2=str1+"\n";
pFile->WriteString(str2);
for(int j=0;j<iLineNum;j++)
{
pFile->WriteString("1,1,5,0.300000,1.000000,1.000000,7,9,0\n");
str1.Format("%d",LMData[j].mPointNum);
str1=str1+"\n";
pFile->WriteString(str1);
/////////////////////////////////////////////////////////////////////
GetRealXData(j);
for(int i=0;i<LMData[j].mPointNum;i++)
{
str1.Format("%5.6f",LMData[j].m_MData[i].x);
str2.Format("%5.6f",LMData[j].m_MData[i].y);
strTemp=str1+","+str2+"\n";
pFile->WriteString(strTemp);
}
dDisatance=GetDistance(LMData[j].m_MData,LMData[j].mPointNum);
str1.Format("%5.6f",dDisatance);
str2.Format("%d",j+1);
strTemp=str2+","+str1+"\n";
pFile->WriteString(strTemp);
}
pFile->Close();
}
catch(...)
{
::AfxMessageBox("The format of the file is not match!");
}
// ::AfxMessageBox("MData File Open!!");
}
}
}
///////////////////////////////////////////////////////////////////////
/// 获得某条线的长度 /////
///////////////////////////////////////////////////////////////////////
double CMagneticDataToMapGisDialog::GetDistance(MData mData[], int PN)
{
double x1,x2,y1,y2;
double distance=0.0;
for(int i=0;i<PN-1;i++)
{
x1=mData[i].x;
y1=mData[i].y;
x2=mData[i+1].x;
y2=mData[i+1].y;
distance=distance+(sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
}
return distance;
}
///////////////////////////////////////////////////////////////////////
/// 获得X数据元素的X偏移量 /////////
///////////////////////////////////////////////////////////////////////
bool CMagneticDataToMapGisDialog::GetRealXData(int iID)
{
//LinePointDetail LMData[150];
double MMid=0.0,MMAX=57000,MMIN=56000,CO=20.0;
MMid=(MMAX+MMIN)/2.0;
for(int i=0;i<LMData[iID].mPointNum;i++)
{
LMData[iID].m_MData[i].x=LMData[iID].m_MData[i].x
+(LMData[iID].m_MData[i].mData-MMid)*CO/(MMAX-MMIN);
}
return true;
}
////////////////////////////////////////////////////////////////////////////
/// 保存为数据文件(DAT),为MAPGIS提供等值线图接口 ////////
////////////////////////////////////////////////////////////////////////////
void CMagneticDataToMapGisDialog::OnSaveSurferDat()
{
// TODO: Add your control notification handler code here
//CString filename;
char szFilters[]=
"MyType Files (*.dat)|*.dat|All Files (*.*)|*.*||";
CFileDialog dlg(FALSE,_T("dat"),_T("*.dat"),
OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_OVERWRITEPROMPT,
szFilters,0);
dlg.m_ofn.lpstrInitialDir="D:\\DATA";
if (dlg.DoModal())
{
CStdioFile *pFile=new CStdioFile;
CString strTemp="",str1,str2,str3;
int iLong=40;
double dDisatance=0.0;
strTemp=dlg.GetFileName();
if(strTemp=="")
{
::AfxMessageBox("Filename is empty!");
}
else
{
try
{
pFile->Open(dlg.GetFileName(),CFile::modeWrite | CFile::modeCreate); // 打开文件指针
for(int j=0;j<iLineNum;j++)
{
for(int i=0;i<LMData[j].mPointNum;i++)
{
str1.Format("%5.6f",LMData[j].m_MData[i].x);
str2.Format("%5.6f",LMData[j].m_MData[i].y);
str3.Format("%5.1f",LMData[j].m_MData[i].mData);
strTemp=str1+","+str2+","+str3+"\n";
pFile->WriteString(strTemp);
}
}
pFile->Close();
}
catch(...)
{
::AfxMessageBox("The format of the file is not match!");
}
// ::AfxMessageBox("MData File Open!!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -