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

📄 magneticdatatomapgisdialog.cpp

📁 自己编的用于ENVI
💻 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 + -