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

📄 magneticprodoc.cpp

📁 自己编的用于ENVI
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	double fTemp=0.0;
	for(int i=0;i<iT0Num;i++)
	{
		fTemp=fTemp+T0[i];

	}

	dT0=fTemp/(double)iT0Num;
	if(dT0>0.0) 
	   return true;
	else
	   return false;
}
//////////////////////////////////////////////////////////////////////////
/////           处理日变数据,获得日变引起的变化数据 ///////
/////////////////////////////////////////////////////////////////////////
bool CMagneticProDoc::GetRealSunData(SData sArray[], int PN)
{
	for(int i=0;i<PN;i++)
	{
		m_SData[i].mData=sArray[i].mData-dT0;
	}
	
   // ASSERT(i==PN);
	return true;
}
///////////////////////////////////////////////////////////////////////////
////////////  查看T0的值                  /////////////////////////////////
///////////////////////////////////////////////////////////////////////////
void CMagneticProDoc::OnViewT0() 
{
	// TODO: Add your command handler code here
    if(dT0>1.0)    //如果已经获得dT0,直接显示,否则,读取数据文件,计算后显示
	{
      CString cT0;
	  cT0.Format("%f",dT0);
	  AfxMessageBox(cT0);
	}
	else
	{
      	if(!GetSunT0())
		{
           AfxMessageBox("ERROR,I can't get the value! ");
		}
		else
		{
		   CString cT0;
	       cT0.Format("%f",dT0);
	       AfxMessageBox(cT0);
		}
	}
   ///////////////////////////////////////////////////////////////////////////
	if((dT0>1.0 )&&(bRec)&&(!bGetRealSunData))
	{
       GetRealSunData(m_SData, sPointNum);
       bGetRealSunData=true;
	}

}

void CMagneticProDoc::OnDrawCMdata() 
{
	// TODO: Add your command handler code here
	
}
///////////////////////////////////////////////////////////////////////////////
////////  获得磁测数据的最大最小值,以便于绘图,如果是区域性的,需要///////////
////////         手工输入最大最小值,以便于统一绘图!! ///////////////////////  
///////////////////////////////////////////////////////////////////////////////
bool CMagneticProDoc::GetGridMaxMinMid(MData fMArray[])
{
     int i=0,j=0;
	yMMax=yMMin=fMArray[0].mData;
	for(i=0;i<mPointNum;i++)
	{ 
		if(fMArray[i].mData>yMMax)
		  yMMax=fMArray[i].mData;
	    if(fMArray[i].mData<yMMin)
          yMMin=fMArray[i].mData;
	}
	yMMid=(yMMax+yMMin)/2.0;
	
	//yMMid=56500;
	//yMMin=56000;
	//yMMax=57000;

	return true;

}
//////////////////////////////////////////////////////////////////////////////
////////////////     以下是磁测数据文件数据程序段      //////////////////////
//////////////////////////////////////////////////////////////////////////////
void CMagneticProDoc::OnOutputMagdata() 
{
	// TODO: Add your command handler code here
	CFileDialog dlg(false,_T("txt"),_T("*.TXT"),
	                 OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
	                 _T("文本文件 (*.TxT)|*.txt|"));
	if(dlg.DoModal())
	{
	   GetGridMaxMinMid(m_MData);                    //获得最大,最小
       GetMDataX(m_MData, mPointNum);               //调整X 
	   
	   CStdioFile *pFile=new CStdioFile;
	   CString f1,f2,fTemp="";
	   fTemp=dlg.GetFileName();
	   if(fTemp=="")
	   {
		   ::AfxMessageBox(" The filename is empty!");
	   }
       else
	   {
		   pFile->Open(fTemp,CFile::modeWrite | CFile::modeCreate);

		   for(int i=0;i<mPointNum;i++)
		   {   
			   f1.Format("%f",20*(m_MData[i].x-727.5)+1235.356);
			   f2.Format("%f",20*(m_MData[i].y-674.0)+410.9232);
			   fTemp=f1+","+f2+"\n";
			   pFile->WriteString(fTemp);
		   }
		   pFile->Close();
		   ::AfxMessageBox("Magnetic Data output successed!");
	   }
	}
}
////////////////////////////////////////////////////////////////////////////
////////////////     以下是获得磁测数据X值的处理程序段      //////////////////////
////////////////////////////////////////////////////////////////////////////
bool CMagneticProDoc::GetMDataX(MData fMData[], int PN) //获得磁测数据X值
{

   for(int i=0;i<PN;i++)
	{
		m_MData[i].x=fMData[i].x+(fMData[i].mData-yMMid)*CO/(yMMax-yMMin);
	}
	return true;

}
////////////////////////////////////////////////////////////////////////////
////////////////     以下是磁测日变数据值的处理程序段      /////////////////
////////////////////////////////////////////////////////////////////////////
void CMagneticProDoc::OnOutputSData() 
{
	// TODO: Add your command handler code here
   CFileDialog dlg(false,_T("sxt"),_T("*.SXT"),
	                 OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
	                 _T("文本文件 (*.sxt)|*.sxt|"));
	if(dlg.DoModal())
	{
	   CStdioFile *pFile=new CStdioFile;
	   CString f1,f2,f3,f4,f5,fTemp="";
	   int iHour,iMin,iSecond;
	   //double dTime;
	   fTemp=dlg.GetFileName();
	   if(fTemp=="")
	   {
		   ::AfxMessageBox(" The filename is empty!");
	   }
       else
	   {
		   pFile->Open(fTemp,CFile::modeWrite | CFile::modeCreate);

		   for(int i=0;i<sPointNum;i++)
		   {   
			   f1.Format("%5.5f",m_SData[i].mData);
               iHour=m_SData[i].sTime.GetHour();
			   iMin=m_SData[i].sTime.GetMinute();
			   iSecond=m_SData[i].sTime.GetSecond();
               //dTime=(double)iHour+iMin/60.0+iSecond/3600;
			   //f2.Format("%2.6f",dTime);
			   f3.Format("%d",iHour);
			   f4.Format("%d",iMin);
			   f5.Format("%d",iSecond);
			   f2=f3+":"+f4+":"+f5;
			   fTemp=f2+"     "+f1+"\n";
			   pFile->WriteString(fTemp);
		   }
		   pFile->Close();
		   ::AfxMessageBox("Real Sun Data output successed!");
	   }
	}
   
}
///////////////////////////////////////////////////////////////////////////////////
//调用数据交换平台的对话框类,实现数据交换功能!
void CMagneticProDoc::OnExchangExch() 
{
	// TODO: Add your command handler code here
	CDataExPlatFormDialog exdlg;
	exdlg.DoModal();

}

////////////////////////////////////////////////////////////////////////////////////
//////////       日变改正程序段                                    /////////////////
////////////////////////////////////////////////////////////////////////////////////

bool CMagneticProDoc::DayChangRectification(MData mData[], SData sData[])
{
  int i=0,j=0,k=0;
  try{
	for(i=0;i<mPointNum;i++)
		for(j=k;j<sPointNum-1;j++)
		{
           if(mData[i].mTime>sData[j].sTime&&mData[i].mTime<sData[j+1].sTime)
		   {
              m_MData[i].mData=mData[i].mData-(sData[j].mData+sData[j+1].mData)/2.0;
			  //k=0;
		   }
		}
    bRec=true;
	return true;
	
  }
  catch(...)
  {
	  return false;
  }
}

///////////////////////////////////////////////////////////////////////////

void CMagneticProDoc::OnViewDayChangRectification() 
{
	// TODO: Add your command handler code here
	if((dT0>10.0)&&(mPointNum>0)&&(!bRec)&&(bGetRealSunData))
	{
	  ASSERT(DayChangRectification(m_MData, m_SData));
	  ::AfxMessageBox("日变改正完成");
	}
    else
	{
      ::AfxMessageBox("Sat或Zat文件未打开,不能进行日变改正!");
	}

}
////////////////////////////////////////////////////////////////////////////

void CMagneticProDoc::OnOutputMRectificationData() 
{
	// TODO: Add your command handler code here
	if(bRec)
	{
	  CFileDialog dlg(false,_T("zat"),_T("*.zat"),
	                 OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
	                 _T("文本文件 (*.zat)|*.zat|"));
	   if (dlg.DoModal()) 
	   {
         CStdioFile *pFile=new CStdioFile;
	     CString f1,f2,f3,f4,f5,f6,f7,f8,fTemp="";
	     fTemp=dlg.GetFileName();
	     int md=0;
		 if(m_MData[1].y>m_MData[0].y)
		 {
			 md=1;
		 }
		 else
			 md=-1;
	   if(fTemp=="")
	   {
		   ::AfxMessageBox(" The filename is empty!");
	   }
       else
	   {   
		     pFile->Open(fTemp,CFile::modeWrite | CFile::modeCreate);
	   
		     fTemp.Format("%d",mPointNum);
			 fTemp=fTemp+"\n";
             pFile->WriteString(fTemp);
		   for(int i=0;i<mPointNum;i++)
		   {   
			   f1.Format("%d",100+md*i);
			   f2.Format("%d",(long)(m_MData[0].x)*1000);
			   f3.Format("%d",((long)(m_MData[i].y)+4000)*1000);
			   f4.Format("%5.1f",m_MData[i].mData);
			   f6.Format("%2d",m_MData[i].mTime.GetHour());
			   f7.Format("%2d",m_MData[i].mTime.GetMinute());
			   f8.Format("%2d",m_MData[i].mTime.GetSecond());
			   f5=f6+":"+f7+":"+f8;
			   fTemp=f1+"        "+f2+"        "+f3+"        "+f4+"        "+f5+"0"+"\n";
			   
			   pFile->WriteString(fTemp);
		   }
		   pFile->Close();
		   ::AfxMessageBox("Recification Mag Data output successed!");
	   }

	   }

	}
	else
	{
        ::AfxMessageBox("未进行日变改正,或无日变数据!");
	}
}

void CMagneticProDoc::OnExchangGpstoMapGis() 
{
	// TODO: Add your command handler code here
	CGpsToExChangDialog gdlg;
	gdlg.DoModal();
}

void CMagneticProDoc::OnExchangMagnetic() 
{
	// TODO: Add your command handler code here
	CMagneticDataToMapGisDialog mdlg;
	mdlg.DoModal();
}

⌨️ 快捷键说明

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