00001 #ifndef _WINC_SFCDATA
00002 #define _WINC_SFCDATA
00003
00004 #include <stdlib.h>
00005
00006 #include <WXP/CloudLayer.h>
00007 #include <WXP/Date.h>
00008 #include <WXP/StrLib.h>
00009 #include <WXP/String.h>
00010
00011 namespace WXP {
00012 class SfcData {
00013 public:
00014 static const int comment_len = 100;
00015 private:
00016 char id[11];
00017 char name[25];
00018 char area[11];
00019 int type;
00020 int stype;
00021 long wmo;
00022 float lat;
00023 float lon;
00024 float elev;
00025 int prior;
00026 Date date;
00027 int flag;
00028
00029 float t;
00030 float td;
00031 float dir;
00032 float spd;
00033 float gust;
00034 float slp;
00035 float alt;
00036 float vis;
00037 CloudLayer cloud[5];
00038 int num_cld;
00039 char weather[21];
00040 int ptend_type;
00041 float ptend;
00042 float prec3;
00043 float prec6;
00044 float prec12;
00045 float prec24;
00046 float prec;
00047 int prec_per;
00048 int cld_low;
00049 char cld_type[3];
00050 float max_t;
00051 float min_t;
00052 float max6_t;
00053 float min6_t;
00054 float snow_cov;
00055 float solar;
00056 float sst;
00057 float wav_per;
00058 float wav_hgt;
00059 char comment[comment_len];
00060
00061 public:
00062 SfcData();
00063 int init( );
00064 inline int setId( const char *str ){
00065 StrLib::copy( id, 10, str ); return 1; };
00066 inline const char *getId(){ return id; };
00067
00068 inline int setArea( const char *str ){
00069 StrLib::copy( area, 10, str ); return 1; };
00070 inline const char *getArea(){ return area; };
00071
00072 inline int setName( const char *str ){
00073 StrLib::copy( name, 10, str ); return 1; };
00074 inline const char *getName(){ return name; };
00075
00076 inline int setWmo( const char *str ){ wmo = atol( str ); return 1; };
00077 inline int getWmo(){ return wmo; };
00078
00079 inline int setLoc( float rlat, float rlon ){
00080 lat = rlat; lon = rlon; return 1; };
00081
00082 inline float getLat(){ return lat; }
00083 inline float getLon(){ return lon; }
00084
00085 inline int setElev( float el ){ elev = el; return 1; }
00086 inline float getElev(){ return elev; }
00087
00088 inline int setDate( Date rdate ){ date = rdate; return 1; }
00089 int getDate( Date &rdate );
00090 inline Date getDate(){ return date; }
00091 int getTime();
00092 int getSeconds();
00093
00094 inline int setType( int rtype ){ type = rtype; return 1; }
00095 inline int getType(){ return type; }
00096
00097 inline int setT( float rt ){ t = rt; return 1; }
00098 inline float getT(){ return t; }
00099
00100 inline int setTd( float rtd ){ td = rtd; return 1; }
00101 inline float getTd(){ return td; }
00102
00103 inline int setDir( float rdir ){ dir = rdir; return 1; }
00104 inline float getDir(){ return dir; }
00105
00106 inline int setSpd( float rspd ){ spd = rspd; return 1; }
00107 inline float getSpd(){ return spd; }
00108
00109 inline int setGust( float rgust ){ gust = rgust; return 1; }
00110 inline float getGust(){ return gust; }
00111
00112 inline int setAlt( float ralt ){ alt = ralt; return 1; }
00113 inline float getAlt(){ return alt; }
00114
00115 inline int setSlp( float rslp ){ slp = rslp; return 1; }
00116 inline float getSlp(){ return slp; }
00117
00118 inline int setVis( float rvis ){ vis = rvis; return 1; }
00119 inline float getVis(){ return vis; }
00120
00121 inline int setWeather( const char *wx ){
00122 StrLib::copy( weather, 21, wx ); return 1; }
00123 inline const char *getWeather(){ return weather; }
00124 int weatherText( String &str );
00125
00126 inline int setNumCld( int num ){ num_cld = num; return 1; }
00127 inline int getNumCld(){ return num_cld; }
00128
00129 int setCldHeight( int ind, float height );
00130 float getCldHeight( int ind );
00131 float getCldHeight();
00132 int setCldCover( int ind, char cover );
00133 char getCldCover( int ind );
00134 char getCldCover();
00135
00136 inline int setPtendType( int type ){ ptend_type = type; return 1; }
00137 inline int getPtendType(){ return ptend_type; }
00138
00139 inline int setPtend( float rptend ){ ptend = rptend; return 1; }
00140 inline float getPtend(){ return ptend; }
00141
00142 inline int setPrec3( float val ){ prec3 = val; return 1; }
00143 inline float getPrec3(){ return prec3; }
00144
00145 inline int setPrec6( float val ){ prec6 = val; return 1; }
00146 inline float getPrec6(){ return prec6; }
00147
00148 inline int setPrec12( float val ){ prec12 = val; return 1; }
00149 inline float getPrec12(){ return prec12; }
00150
00151 inline int setPrec24( float val ){ prec24 = val; return 1; }
00152 inline float getPrec24(){ return prec24; }
00153
00154 inline int setPrec( float val ){ prec = val; return 1; }
00155 inline float getPrec(){ return prec; }
00156
00157 inline int setPrecPer( int per ){ prec_per = per; return 1; }
00158 inline int getPrecPer(){ return prec_per; }
00159
00160 inline int setCldLow( int low ){ cld_low = low; return 1; }
00161 inline int getCldLow(){ return cld_low; }
00162
00163 int setCldType( int ind, char type );
00164 char getCldType( int ind );
00165
00166 inline int setMaxT( float t ){ max_t = t; return 1; }
00167 inline float getMaxT(){ return max_t; }
00168
00169 inline int setMinT( float t ){ min_t = t; return 1; }
00170 inline float getMinT(){ return min_t; }
00171
00172 inline int setMax6T( float t ){ max6_t = t; return 1; }
00173 inline float getMax6T(){ return max6_t; }
00174
00175 inline int setMin6T( float t ){ min6_t = t; return 1; }
00176 inline float getMin6T(){ return min6_t; }
00177
00178 inline int setSnowCov( float snow ){ snow_cov = snow; return 1; }
00179 inline float getSnowCov(){ return snow_cov; }
00180
00181 inline int setSolar( float solar ){ solar = solar; return 1; }
00182 inline float getSolar(){ return solar; }
00183
00184 inline int setSst( float sst ){ sst = sst; return 1; }
00185 inline float getSst(){ return sst; }
00186
00187 inline int setWavPer( float wav_per ){ wav_per = wav_per; return 1; }
00188 inline float getWavPer(){ return wav_per; }
00189
00190 inline int setWavHgt( float wav_hgt ){ wav_hgt = wav_hgt; return 1; }
00191 inline float getWavHgt(){ return wav_hgt; }
00192
00193 int setComment( const char *str );
00194 int addComment( const char *str );
00195 int addComment( const char *str, int num );
00196 const char *getComment();
00197 int setFlag( int val );
00198 int orFlag( int val );
00199 int getFlag();
00200 int print();
00201 int printLine();
00202 int outString( String &str );
00203 int update( SfcData &rep, int lev );
00204 inline int update( SfcData &rep ){ return update( rep, 0xFFFF ); };
00205 int validate();
00206
00207 static int compare( SfcData &rep1, SfcData &rep2 );
00208 static int printDiff( int diff );
00209
00210 friend class SfcDataTool;
00211 friend class SfcDecode;
00212 friend class MetarTool;
00213 friend class SynopTool;
00214 friend class SaoTool;
00215 friend class SfcFile;
00216 friend class SfcWxpFile;
00217 friend class SfcCdfFile;
00218 friend class SfcXmlFile;
00219
00220
00221
00222 enum Locate { USA, CANADA, MEXICO, OTHER };
00223
00224 enum StatType { MANNED, AMOS, ASOS, AWOS };
00225
00226 enum RepType {
00227 UNK,
00228 METAR,
00229 SPECI,
00230 SA,
00231 SP,
00232 SYNOP,
00233 SHIP,
00234 BUOY,
00235 DRIBU,
00236 CMAN,
00237 MISC
00238 };
00239
00240 static const int RMK = 0x1;
00241 static const int TGRP = 0x2;
00242
00243 static const int SPECIAL = 1;
00244 static const int CORRECT = 2;
00245 static const int AUTO = 4;
00246
00247 static const int DF_TYPE = 1;
00248 static const int DF_TIME = 1 << 1;
00249 static const int DF_TEMP = 1 << 2;
00250 static const int DF_PRES = 1 << 3;
00251 static const int DF_WIND = 1 << 4;
00252 static const int DF_WX = 1 << 5;
00253 static const int DF_CLD = 1 << 6;
00254 static const int DF_VIS = 1 << 7;
00255 static const int DF_PTND = 1 << 8;
00256 static const int DF_PREC = 1 << 9;
00257 static const int DF_EXTT = 1 << 10;
00258 static const int DF_SNOW = 1 << 11;
00259 static const int DF_SOL = 1 << 12;
00260 static const int DF_SEA = 1 << 13;
00261 static const int DF_CTYP = 1 << 14;
00262 static const int DF_COM = 1 << 15;
00263 };
00264 }
00265 #endif