EasyRadar-SARadar
CINRAD SA格式
1.反射率距离库长为1公里,最大距离库数为460(不同仰角库数不同)
2.速度和谱宽距离库长为250米,最大距离库数为920(不同仰角库数不同)
3.SA雷达定量观测有效探测距离为230公里
4.SA雷达在低层每个仰角上扫描两次(第一层和第二层)
5.VCP21扫描模式仰角为:0.5,1.5,2.4,3.4,4.3,6.0,9.9,14.6,19.5
更改主菜单左上角
“无标题-”改为“EasyRadar”
// 唯一的一个窗口已初始化,因此显示它并对其进行更新
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->SetWindowText(_T("EasyRadar"));
m_pMainWnd->UpdateWindow();
更改关于
位置:资源视图Dialog中IDD_ABOUTBOX
操作:选中Text Control,在属性窗口更改Caption
SA雷达解码函数(仅反射率)
VS2010 MFC
#define MaxEl 9
#define MaxAz 400
#define MaxBinNum 460
//解码函数
int CSARadar::DecodeFile(CString filepath)
{
CFile file;
if(!file.Open(filepath, CFile::modeRead)) return -1;//文件打开失败
//创建动态数组
m_ref = new float**[MaxEl];
m_el = new float[MaxEl];
m_az = new float*[MaxEl];
m_radialnum = new int[MaxEl];
m_binnum = new int[MaxEl];
m_binwidth = new int[MaxEl];
int sizesum = sizeof(m_ref) * MaxBinNum;
for(int i = 0; i < MaxEl; i++){
m_ref[i] = new float*[MaxAz];
m_az[i] = new float[MaxAz];
for(int j = 0; j < MaxAz; j++){
m_ref[i][j] = new float[MaxBinNum];
memset(m_ref[i][j], 0, sizesum);//初始化
}
}
int ToRaNum = 0;//径向总数
ToRaNum = file.GetLength() / 2432;//一个径向的字节
unsigned char refdata;//字节数据
int m = 0;//仰角序号
int n = 0;//方位角序号
int k = 0;//库数序号
for(int i = 0; i < ToRaNum; i++){
file.Read(&m_rfh, sizeof(m_rfh));//读一条径向
if(m_rfh.ElNumber == 2 || m_rfh.ElNumber == 4) continue;//径向序号1-11;低层每层扫描两次,2、4剔除
if(m_rfh.RadialStatus == 0 || m_rfh.RadialStatus == 3 ){//径向状态:0该仰角第一条;3体扫第一条
m_binnum[m] = m_rfh.GatesNumberOfReflectivity;//层径向库数
m_binwidth[m] = m_rfh.GateSizeOfReflectivity;//层径向库宽
}
n = m_rfh.RadialNumber - 1;//方位序号1-xxx
m_az[m][n] = m_rfh.Az * Radar_TransPara;//径向方位角
//遍历
unsigned char *pbeg = begin(m_rfh.Echodata);
unsigned char *pend = end(m_rfh.Echodata);
k = 0;
while (pbeg != pend ){
if(k < RGates){
if(k < m_binnum[m]){
refdata = m_rfh.Echodata[k];
if(refdata == 0) m_ref[m][n][k] = -99;
else if(refdata == 1) m_ref[m][n][k] = -99;
else m_ref[m][n][k] = (refdata - 2) / 2. - 32;
}
}
//跳过速度和谱宽数据
k++;
pbeg++;
}
if(m_rfh.RadialStatus == 2 || m_rfh.RadialStatus == 4 ){//径向状态:2该仰角最后一条;4体扫最后一条
m_radialnum[m] = m_rfh.RadialNumber;//层径向数
m_el[m] = m_rfh.El * Radar_TransPara;//层仰角
m++;
}
}
file.Close();
return 1;
}
画图效果
画图代码与SC中的一样,改改比率就可以了