00001 #ifndef _WINC_RCMDATA
00002 #define _WINC_RCMDATA
00003
00004 #include <WXP/Const.h>
00005 #include <WXP/Date.h>
00006
00007 namespace WXP {
00008 class RcmData {
00009 char id[5];
00010 int num;
00011 float lat,lon;
00012 float elev;
00013 Date date;
00014
00015 int mode;
00016 int status;
00017 int loc_type;
00018
00019 char echo[104][104];
00020
00021 int maxt;
00022 float maxt_x, maxt_y;
00023
00024 struct {
00025 char id[3];
00026 float x,y;
00027 int hgt;
00028 int dir,spd;
00029 int hail;
00030 } storm[40];
00031 int num_storm;
00032
00033 struct {
00034 char id[3];
00035 float x,y;
00036 } tvs[10];
00037 int num_tvs;
00038
00039 struct {
00040 char id[3];
00041 float x,y;
00042 } meso[20];
00043 int num_meso;
00044
00045 struct {
00046 int hgt;
00047 int dir, spd;
00048 int rms;
00049 } vad[20];
00050 int num_vad;
00051
00052 public:
00053 RcmData();
00054 int init();
00055 inline const char *getId(){ return id; };
00056 int setLoc( float rlat, float rlon );
00057 inline float getLat(){ return lat; };
00058 inline float getLon(){ return lon; };
00059 inline Date getDate(){ return date; };
00060 inline int getMode(){ return mode; };
00061 inline int getStatus(){ return status; };
00062 inline int setLocType( int val ){ loc_type = val; return 1; };
00063 inline int getLocType(){ return loc_type; };
00064 inline int getMaxTop(){ return maxt; };
00065 inline float getMaxTopX(){ return maxt_x; };
00066 inline float getMaxTopY(){ return maxt_y; };
00067 inline int getNumStorm(){ return num_storm; };
00068 inline const char *getStormId(int ind){ return ind < 0 || ind >= num_storm ? "": storm[ind].id; };
00069 inline float getStormX(int ind){ return ind < 0 || ind >= num_storm ? Const::MISS: storm[ind].x; };
00070 inline float getStormY(int ind){ return ind < 0 || ind >= num_storm ? Const::MISS: storm[ind].y; };
00071 inline int getStormHgt(int ind){ return ind < 0 || ind >= num_storm ? Const::MISS: storm[ind].hgt; };
00072 inline int getStormDir(int ind){ return ind < 0 || ind >= num_storm ? Const::MISS: storm[ind].dir; };
00073 inline int getStormSpd(int ind){ return ind < 0 || ind >= num_storm ? Const::MISS: storm[ind].spd; };
00074 inline int getStormHail(int ind){ return ind < 0 || ind >= num_storm ? Const::MISS: storm[ind].hail; };
00075 inline int getNumTvs(){ return num_tvs; };
00076 inline float getTvsX(int ind){ return ind < 0 || ind >= num_tvs ? Const::MISS: tvs[ind].x; };
00077 inline float getTvsY(int ind){ return ind < 0 || ind >= num_tvs ? Const::MISS: tvs[ind].y; };
00078 inline int getNumMeso(){ return num_meso; };
00079 inline float getMesoX(int ind){ return ind < 0 || ind >= num_meso ? Const::MISS: meso[ind].x; };
00080 inline float getMesoY(int ind){ return ind < 0 || ind >= num_meso ? Const::MISS: meso[ind].y; };
00081 int print();
00082 int printStorm( int ind );
00083 int printEchoes();
00084
00085 enum LocType {
00086 SITE,
00087 EARTH
00088 };
00089
00090 enum Mode {
00091 NONE,
00092 PRECIP,
00093 CLEAR_AIR
00094 };
00095
00096 enum Status {
00097 NA,
00098 NE,
00099 OM,
00100 PR
00101 };
00102
00103 friend class RcmFile;
00104 friend class RcmWxpFile;
00105 friend class RcmImage;
00106 friend class RcmPlot;
00107 friend class RcmDecode;
00108 friend class RcmHash;
00109 };
00110 }
00111 #endif