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

📄 src.cpp

📁 监测----基数据格式解读的源代码.rar
💻 CPP
字号:
#include "fileheader.h"

CFile file;

void OpenDataFile(char worktype)
{
	switch(worktype)
	{
	case 'P':
		if (datatype==ID_Z )//|| datatype==ID_T)
			szfilter="三要素PPI数据(*.??P)|*.??p|单强度PPI数据(*.??Z)|*.??z||";
		else
			szfilter="三要素PPI数据(*.??P)|*.??p||";
		break;
	case 'R':
		if (datatype==ID_Z )//|| datatype==ID_T)
			szfilter="三要素RHI数据(*.??R)|*.??r|单强度RHI数据(*.??I)|*.??i||";
		else
			szfilter="三要素RHI数据(*.??R)|*.??r||";
		break;
	case 'V':
		szfilter="三要素体扫数据(*.??V)|*.??v||";
		break;
	}

	char szDirName[256];
	strcpy(szDirName,DataPath); // DataPath 为基数据所在路径
	CFileDialog	File(TRUE,NULL,NULL,OFN_HIDEREADONLY,szfilter,NULL);
	File.m_ofn.lpstrInitialDir=szDirName;
	File.m_ofn.lpstrTitle="打开数据";

	if(File.DoModal()==IDOK) 
	{
		CString DFileName=File.GetPathName();
		if(!file.Open(DFileName,CFile::modeRead|CFile::typeBinary,NULL))
		{
			MessageBox("File could not be opened!");
			return;
		}
		if(file.Read(&DataFileHead,sizeof(NewRadarHeader)) != sizeof(NewRadarHeader)) //读出文件头信息
		{
			AfxMessageBox("非雷达原始数据文件!");
			file.Close();
			return;
		}
		if(DataFileHead.ObservationInfo.stype!=1 && 
			DataFileHead.ObservationInfo.stype!=10 &&
			DataFileHead.ObservationInfo.stype<=100) //判断是否为三类扫描数据:PPI,RHI和VOL
		{
			AfxMessageBox("非法雷达原始数据文件!");
			return;
		}
		GetNewParam();
		GetRawRadarData();
		...
		file.Close();
}


void CMainFrame::GetNewParam()
{
	sYear=DataFileHead.ObservationInfo.syear; //年
	sMonth=DataFileHead.ObservationInfo.smonth; //月
	sDay=DataFileHead.ObservationInfo.sday; //日
	sHour=DataFileHead.ObservationInfo.shour; //时
	sMinute=DataFileHead.ObservationInfo.sminute; //分
	sSecond=DataFileHead.ObservationInfo.ssecond;   //秒
	station=DataFileHead.SiteInfo.station; //雷达站名
	stationnumber=DataFileHead.SiteInfo.stationnumber; // 雷达站编号
	radartype=DataFileHead.SiteInfo.radartype; // 雷达类型
	latitude=(double)DataFileHead.SiteInfo.lantitudevalue/100.0; // 雷达所在经度
	longitude=(double)DataFileHead.SiteInfo.longitudevalue/100.0; // 雷达所在纬度

	int temp;
	if (DataFileHead.ObservationInfo.stype>100) //* Volume scan
	{
		CompletedLayer=DataFileHead.ObservationInfo.stype-100; // 体扫层数
		if (VolumeLayer>CompletedLayer) VolumeLayer=0;
		Gate=DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].binWidth/10; //库长
		CurEL=(double)DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].Swangles/100;
		CmdEL=(double)DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].Swangles/100;
		NumberPerRadial=DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].binnumber;
		RecordNumPerLayer=DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].recordnumber;
		dmaxvel=(double)DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].MaxV/100.0;
		dmaxsw=(double)DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].MaxV/200;
		repeatFreq1=DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].Prf1/10;
		repeatFreq2=DataFileHead.ObservationInfo.LayerParam[theApp.VolumeLayer].Prf2/10;
	}
	else if (DataFileHead.ObservationInfo.stype>=10)				//* PPI scan
	{
		Gate=DataFileHead.ObservationInfo.LayerParam[0].binWidth/10;
		CurEL=(double)DataFileHead.ObservationInfo.LayerParam[0].Swangles/100;
		CmdEL=(double)DataFileHead.ObservationInfo.LayerParam[0].Swangles/100;
		NumberPerRadial=DataFileHead.ObservationInfo.LayerParam[0].binnumber;
		RecordNumPerLayer=DataFileHead.ObservationInfo.LayerParam[0].recordnumber;
		dmaxvel=(double)DataFileHead.ObservationInfo.LayerParam[0].MaxV/100.0;
		dmaxsw=theApp.dmaxvel/2;//=DataFileHead.ObservationInfo.LayerParam[0].MaxV/100.0;
		repeatFreq1=DataFileHead.ObservationInfo.LayerParam[0].Prf1/10;
		repeatFreq2=DataFileHead.ObservationInfo.LayerParam[0].Prf2/10;
		if (DataFileHead.ObservationInfo.stype==10)
		{
			if (NumberPerRadial==sizeof(SingleIntensity))
			{
				FileType=//单强度数据类型
			}
			else 
			{
				FileType=//多要素数据类型
			}
		}
		else 
		{
			temp=DataFileHead.ObservationInfo.stype-10;
			if (temp==1)
				FileType=//单强度数据类型
			else if	(temp==4)
				FileType=//多要素数据类型
			else if (temp==2)
				FileType=//强度速度数据类型
		}
	}
	else if(DataFileHead.ObservationInfo.stype>=1)  //* RHI scan
	{
		Gate=DataFileHead.ObservationInfo.LayerParam[0].binWidth/10;
		CurAZ=(double)DataFileHead.ObservationInfo.RHIA/100; //* azimuth
		CmdAZ=(double)DataFileHead.ObservationInfo.RHIA/100; //* azimuth
		NumberPerRadial=DataFileHead.ObservationInfo.LayerParam[0].binnumber;
		RecordNumPerLayer=DataFileHead.ObservationInfo.LayerParam[0].recordnumber;
		dmaxvel=(double)DataFileHead.ObservationInfo.LayerParam[0].MaxV/100;
		dmaxsw=(double)DataFileHead.ObservationInfo.LayerParam[0].MaxV/200;
		repeatFreq1=DataFileHead.ObservationInfo.LayerParam[0].Prf1/10;
		repeatFreq2=DataFileHead.ObservationInfo.LayerParam[0].Prf2/10;
		if (DataFileHead.ObservationInfo.stype==1)
		{
			if (NumberPerRadial==sizeof(SingleIntensity))
			{
				FileType=//单强度数据类型
			}
			else 
			{
				FileType=//多要素数据类型
			}
		}
		else 
		{
			temp=DataFileHead.ObservationInfo.stype-1;
			if (temp==1)
				FileType=//单强度数据类型
			else if	(temp==4)
				FileType=//多要素数据类型
			else if (temp==2)
				FileType=//强度速度数据类型
		}
	}
	...
}


void 	GetRawRadarData() {
	RVP7Data rawdata;
	file.Seek(1024L,0);
	for(int i=0;i<RecordNumPerLayer;i++) {
		if(file.Read(&rawdata,NumberPerRadial)!=NumberPerRadial) break;
		factAZ=rawdata.startaz*360.0/65536.0;//记录所在的方位
		factEL=rawdata.startel*120.0/65536.0;//记录所在的仰角

		for(int j=0;j<RAWRECORDLENGTH;j++) {
			 if(rawdata.RawData[j].m_dbz)  // 计算dBz值
				  fdbz=rawdata.RawData[j].m_dbz/2.0-32.0;
			 else   fdbz不可用;
			 if(rawdata.RawData[j].m_vel)  // 计算径向速度值
				  fvel=dmaxvel*rawdata.RawData[j].m_vel/127.0;
			 else   fvel不可用;
			 if(rawdata.RawData[j].m_sw)  // 计算速度谱宽值
				  fsw=dmaxsw*rawdata.RawData[j].m_sw/256.0;
			 else   fsw不可用;
			 if(rawdata.RawData[j].m_undbz) // 计算无地杂波抑制dBz值
				  fundbz=rawdata.RawData[j].m_undbz/2.0-32.0;
			 else   fundbz不可用;
		}
	}
	}

⌨️ 快捷键说明

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