- update metar

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9212 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 7e1e17724c9a640efe3942d11cdb3126163b8635
Former-commit-id: 6f68334019d459740f64725a23b9b726f6567f70
This commit is contained in:
torcs-ng 2023-11-06 07:59:15 +00:00
parent 42316114fa
commit de7e4fafec
2 changed files with 64 additions and 3 deletions

View file

@ -757,7 +757,7 @@ reTrackInitRealWeather(void)
else else
trackLocal->airpressure = (tdble)(webMetar->getPressure_hPa()); trackLocal->airpressure = (tdble)(webMetar->getPressure_hPa());
trackLocal->airpressure = (tdble)(trackLocal->airpressure * 100); trackLocal->airpressure = (tdble)(trackLocal->airpressure);
if (webMetar->getDensity_C() == WebMetarNaN) if (webMetar->getDensity_C() == WebMetarNaN)
trackLocal->airdensity = 1.219f; trackLocal->airdensity = 1.219f;

View file

@ -1125,6 +1125,15 @@ bool ReWebMetar::scanPressure()
char *m = _m; char *m = _m;
double factor; double factor;
int press, i; int press, i;
bool unitProvided = true;
bool valueProvided = true;
//_pressure = 101300.0;
if (*m == '\0')
{
_pressure = 101300.0; // pressure not provided... assume standard pressure
return true;
}
if (*m == 'A') if (*m == 'A')
factor = 3386.388640341 / 100; factor = 3386.388640341 / 100;
@ -1139,7 +1148,59 @@ bool ReWebMetar::scanPressure()
press *= 100; press *= 100;
if (!strncmp(m, "//", 2)) // not spec compliant! if (*m == ' ') // ignore space
m++;
if (!strncmp(m, "////", 4))
{
// sensor failure... assume standard pressure
if (*(m - 1) == 'A')
press = 2992;
else
press = 1013;
m += 4;
}
else
{
if (!scanNumber(&m, &press, 2, 4))
{
valueProvided = false;
// sensor failure... assume standard pressure
if (*(m - 1) == 'A')
press = 2992;
else
press = 1013;
}
}
if (press < 100)
{
// 2-digit pressure may have further data following
press *= 100;
if (!strncmp(m, "//", 2)) // not spec compliant!
m += 2;
else if (scanNumber(&m, &i, 2))
press += i;
}
if (*m == ',' || *m == '=') // ignore trailing comma, equals
m++;
if ((unitProvided || valueProvided) && !scanBoundary(&m))
return false;
// derive unit when not explicitly provided
if (!unitProvided)
factor = (press > 2000 ? 3386.388640341 / 100.0 : 100.0);
_pressure = (press * factor);
_m = m;
return true;
/*if (!strncmp(m, "//", 2)) // not spec compliant!
m += 2; m += 2;
else if (scanNumber(&m, &i, 2)) else if (scanNumber(&m, &i, 2))
press += i; press += i;
@ -1155,7 +1216,7 @@ bool ReWebMetar::scanPressure()
GfLogDebug("Pressure = %.3f\n", _pressure); GfLogDebug("Pressure = %.3f\n", _pressure);
_grpcount++; _grpcount++;
return true; return true;*/
} }
static const char *runway_deposit[] = static const char *runway_deposit[] =