1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
|
/**********************************************************************
XyGrib: meteorological GRIB file viewer
Copyright (C) 2008-2012 - Jacques Zaninetti - http://www.zygrib.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************/
#include "DataQString.h"
//-------------------------------------------------
QString DataCodeStr::toString (const DataCenterModel &dcm)
{
switch (dcm) {
case NOAA_GFS :
return "NOAA-GFS";
case NOAA_GFS_ENSEMBLE :
return "NOAA-GFS-ENSEMBLE";
case NOAA_NAM :
return "NOAA-NAM";
case NOAA_NCEP_WW3 :
return "NOAA-NCEP-WW3";
case METEOBLUE_NMM4 :
return "METEOBLUE-NMM4";
case FNMOC_WW3_GLB :
return "FNMOC-WW3-GLOBAL";
case FNMOC_WW3_MED :
return "FNMOC-WW3-MEDIT";
case NORWAY_METNO :
return "NORWAY-MET";
case SKIRON :
return "OPENSKIRON";
case DWD_ICON :
return "DWD-ICON";
case DWD_ICON_EU :
return "DWD-ICON-EU Nest";
case ECMWF :
return "ECMWF";
case ECMWF_WAVE :
return "ECMWF-WAVE";
case ECMWF_ERA5:
return "ECMWF-ERA5";
case DWD_ICON_GLOBAL :
return "DWD-ICON-Global";
case DWD_GWAM :
return "DWD-GWAM";
case DWD_EWAM :
return "DWD-EWAM";
case MF_WAM :
return "MF-WAM";
case MF_ARPEGE_GLOBAL :
return "Arpege-Global";
case MF_ARPEGE_EU :
return "Arpege-EU nest";
case MF_ARPEGE :
return "Arpege";
case MF_AROME :
return "Arome";
case NMC :
return "Belgium NMC";
case OTHER_DATA_CENTER :
default:
return "";
}
}
//-------------------------------------------------
QString AltitudeStr::toString (const Altitude &alt)
{
QString res;
switch (alt.levelType) {
case LV_GND_SURF:
res = tr("surface");
break;
case LV_ISOTHERM0:
res = tr("isotherm 0°C");
break;
case LV_ISOBARIC:
case LV_CLOUD_LOW_BOTTOM:
case LV_CLOUD_MID_BOTTOM:
case LV_CLOUD_HIG_BOTTOM:
case LV_CLOUD_LOW_TOP:
case LV_CLOUD_MID_TOP:
case LV_CLOUD_HIG_TOP:
res = tr("%1 hPa").arg(alt.levelValue);
break;
case LV_MSL :
res = tr("sea level");
break;
case LV_ABOV_MSL:
res = tr("%1 m above mean sea level").arg(alt.levelValue);
break;
case LV_ABOV_GND:
res = tr("%1 m above ground").arg(alt.levelValue);
break;
case LV_SIGMA:
res = tr("sigma %1").arg((int)(alt.levelValue/10));
break;
case LV_ATMOS_ALL:
res = tr("atmosphere");
break;
case LV_CLOUD_LOW_LAYER :
res = tr("low cloud layer");
break;
case LV_CLOUD_MID_LAYER :
res = tr("middle cloud layer");
break;
case LV_CLOUD_HIG_LAYER :
res = tr("high cloud layer");
break;
default:
res = "";
}
return res;
}
//-------------------------------------------------
QString AltitudeStr::toStringShort (const Altitude &alt)
{
QString res;
switch (alt.levelType) {
case LV_GND_SURF:
res = tr("sfc");
break;
case LV_ISOTHERM0:
res = tr("iso0°C");
break;
case LV_ISOBARIC:
case LV_CLOUD_LOW_BOTTOM:
case LV_CLOUD_MID_BOTTOM:
case LV_CLOUD_HIG_BOTTOM:
case LV_CLOUD_LOW_TOP:
case LV_CLOUD_MID_TOP:
case LV_CLOUD_HIG_TOP:
res = tr("%1hpa").arg(alt.levelValue);
break;
case LV_MSL :
res = tr("MSL");
break;
case LV_ABOV_MSL:
if (alt.levelValue == 0)
res = tr("MSL");
else
res = tr("%1 m ab.MSL").arg(alt.levelValue);
break;
case LV_BLW_SURF:
res = tr("-%1 m").arg(alt.levelValue);
break;
case LV_ABOV_GND:
if (alt.levelValue == 0)
res = tr("sfc");
else
res = tr("%1 m").arg(alt.levelValue);
break;
case LV_SIGMA:
res = tr("sigma%1").arg((int)(alt.levelValue/10));
break;
case LV_ATMOS_ALL:
res = tr("atm");
break;
case LV_CLOUD_LOW_LAYER :
res = tr("lowCldLay");
break;
case LV_CLOUD_MID_LAYER :
res = tr("midCldLay");
break;
case LV_CLOUD_HIG_LAYER :
res = tr("higCldLay");
break;
default:
//DBG("alt.levelType=%d", alt.levelType);
res = "";
}
return res;
}
//-------------------------------------------------
QString DataCodeStr::toString_name (int dataType)
{
return toString_name (DataCode(dataType,LV_GND_SURF,0));
}
//-------------------------------------------------
QString DataCodeStr::toString_name (const DataCode &dtc)
{
switch (dtc.dataType) {
case GRB_PRESSURE : return tr("Pressure");
case GRB_PRESSURE_MSL : return tr("Pressure")+" "+tr("MSL");
case GRB_GEOPOT_HGT : return tr("Geopotential height");
case GRB_TEMP : return tr("Temperature");
case GRB_TEMP_POT : return tr("Potential temperature");
case GRB_TMAX : return tr("Temperature max");
case GRB_TMIN : return tr("Temperature min");
case GRB_DEWPOINT : return tr("Dew point");
case GRB_CUR_VX : return tr("Current (Vx)");
case GRB_CUR_VY : return tr("Current (Vy)");
case GRB_CUR_DIR : return tr("Current (direction)");
case GRB_CUR_SPEED : return tr("Current (speed)");
case GRB_WIND_VX : return tr("Wind (Vx)");
case GRB_WIND_VY : return tr("Wind (Vy)");
case GRB_WIND_DIR : return tr("Wind (direction)");
case GRB_WIND_SPEED : return tr("Wind (speed)");
case GRB_HUMID_SPEC : return tr("Specific humidity");
case GRB_HUMID_REL : return tr("Relative humidity");
case GRB_PRECIP_RATE : return tr("Precipitation rate");
case GRB_PRECIP_TOT : return tr("Total precipitation");
case GRB_SNOW_DEPTH : return tr("Snow (depth)");
case GRB_CLOUD_TOT : return tr("Cloud cover");
case GRB_CLOUD_LOW : return tr("Cloud cover (low)");
case GRB_CLOUD_MID : return tr("Cloud cover (middle)");
case GRB_CLOUD_HIG : return tr("Cloud cover (high)");
case GRB_FRZRAIN_CATEG: return tr("Frozen rain possible");
case GRB_SNOW_CATEG : return tr("Snowfall possible");
case GRB_CAPE : return tr("CAPE");
case GRB_CIN : return tr("CIN");
// added by david
case GRB_COMP_REFL : return tr("Composite Reflectivity");
case GRB_PRV_WIND_XY2D : return tr("Wind");
case GRB_PRV_WIND_JET : return tr("Wind (jet stream)");
case GRB_PRV_DIFF_TEMPDEW : return tr("Gap temperature-dew point");
case GRB_PRV_THETA_E : return tr("Theta-e");
case GRB_WIND_GUST :
if (Util::getSetting("useAbsoluteGustSpeed", true).toBool())
return tr("Absolute wind gust");
return tr("Relative wind gust");
case GRB_WIND_GUST_VX : return tr("Wind gust (Vx)");
case GRB_WIND_GUST_VY : return tr("Wind gust (VY)");
case GRB_PRV_CUR_DIR : return tr("Current direction");
case GRB_PRV_CUR_XY2D : return tr("Current");
case GRB_WAV_SIG_HT : return tr("Significant wave height");
case GRB_WAV_DIR : return tr("Combined wind waves and swell direction");
case GRB_WAV_PER : return tr("Combined wind waves and swell mean period");
case GRB_WAV_WND_DIR : return tr("Wind wave direction");
case GRB_WAV_WND_HT : return tr("Wind wave height");
case GRB_WAV_WND_PER : return tr("Wind wave period");
case GRB_WAV_SWL_DIR : return tr("Swell wave direction");
case GRB_WAV_SWL_HT : return tr("Swell wave height");
case GRB_WAV_SWL_PER : return tr("Swell wave period");
case GRB_WAV_PRIM_DIR : return tr("Primary wave direction");
case GRB_WAV_PRIM_PER : return tr("Primary wave period");
case GRB_WAV_SCDY_DIR : return tr("Secondary wave direction");
case GRB_WAV_SCDY_PER : return tr("Secondary wave period");
case GRB_WAV_MAX_DIR : return tr("Maximum wave direction");
case GRB_WAV_MAX_HT : return tr("Maximum wave height");
case GRB_WAV_MAX_PER : return tr("Maximum wave period");
case GRB_WAV_WHITCAP_PROB : return tr("Whitecap probability");
case GRB_PRV_WAV_SIG : return tr("Wind waves and swell");
case GRB_PRV_WAV_MAX : return tr("Maximum wave");
case GRB_PRV_WAV_SWL : return tr("Swell");
case GRB_PRV_WAV_WND : return tr("Wind wave");
case GRB_PRV_WAV_PRIM : return tr("Primary wave");
case GRB_PRV_WAV_SCDY : return tr("Secondary wave");
default:
DBG("Unknown data type: %d", dtc.dataType);
return "";
}
}
//-------------------------------------------------
QString DataCodeStr::toString_level (const DataCode &dtc)
{
return AltitudeStr::toString (dtc.getAltitude());
}
//-------------------------------------------------
QString DataCodeStr::toString (const DataCode &dtc)
{
QString name = toString_name (dtc);
QString level = toString_level (dtc);
if (level != "")
return name+" (" +level+ ")";
return name;
}
//-------------------------------------------------
QString DataCodeStr::toString_levelShort (const DataCode &dtc)
{
QString name = toString_name (dtc);
QString level = AltitudeStr::toStringShort (dtc.getAltitude());
if (level != "")
return name+" (" +level+ ")";
return name;
}
//-------------------------------------------------
QString AltitudeStr::serialize (const Altitude &alt)
{
return QString("%1;%2").arg(alt.levelType).arg(alt.levelValue);
}
//-------------------------------------------------
Altitude AltitudeStr::unserialize (const QString &stringCode)
{
Altitude alt;
QStringList list = stringCode.split(";");
if (list.size() == 2) {
bool ok;
alt.levelType = list.at(0).toInt (&ok);
if (!ok) alt.levelType = LV_TYPE_NOT_DEFINED;
alt.levelValue = list.at(1).toInt (&ok);
if (!ok) alt.levelType = LV_TYPE_NOT_DEFINED;
}
else {
alt.levelType = LV_TYPE_NOT_DEFINED;
}
return alt;
}
//-------------------------------------------------
QString DataCodeStr::serialize (const DataCode &dtc)
{
return QString("%1;%2;%3").arg(dtc.dataType).arg(dtc.levelType).arg(dtc.levelValue);
}
//-------------------------------------------------
DataCode DataCodeStr::unserialize (const QString &stringCode)
{
DataCode dtc;
QStringList list = stringCode.split(";");
if (list.size() == 3) {
bool ok;
dtc.dataType = list.at(0).toInt (&ok);
if (!ok) dtc.dataType = GRB_TYPE_NOT_DEFINED;
dtc.levelType = list.at(1).toInt (&ok);
if (!ok) dtc.dataType = GRB_TYPE_NOT_DEFINED;
dtc.levelValue = list.at(2).toInt (&ok);
if (!ok) dtc.dataType = GRB_TYPE_NOT_DEFINED;
}
else {
dtc.dataType = GRB_TYPE_NOT_DEFINED;
}
return dtc;
}
|