📄 src.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 + -