mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-26 18:55:38 +08:00
@@ -12,9 +12,11 @@
|
|||||||
#include "blackmisc/logmessage.h"
|
#include "blackmisc/logmessage.h"
|
||||||
#include "blackmisc/math/mathutils.h"
|
#include "blackmisc/math/mathutils.h"
|
||||||
#include "blackmisc/geo/coordinategeodetic.h"
|
#include "blackmisc/geo/coordinategeodetic.h"
|
||||||
|
#include "blackmisc/pq/temperature.h"
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QEventLoop>
|
#include <QEventLoop>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
using namespace BlackMisc::Aviation;
|
using namespace BlackMisc::Aviation;
|
||||||
@@ -256,8 +258,11 @@ namespace BlackWxPlugin
|
|||||||
GfsIsobaricLayer isobaricLayer = isobaricLayerIt.value();
|
GfsIsobaricLayer isobaricLayer = isobaricLayerIt.value();
|
||||||
CAltitude level(isobaricLayerIt.key(), CAltitude::MeanSeaLevel, CLengthUnit::ft());
|
CAltitude level(isobaricLayerIt.key(), CAltitude::MeanSeaLevel, CLengthUnit::ft());
|
||||||
|
|
||||||
CTemperatureLayer temperature(level, CTemperature(isobaricLayer.temperature, CTemperatureUnit::K()), {}, isobaricLayer.relativeHumidity);
|
auto temperature = CTemperature { isobaricLayer.temperature, CTemperatureUnit::K() };
|
||||||
temperatureLayers.insert(temperature);
|
auto dewPoint = calculateDewPoint(temperature, isobaricLayer.relativeHumidity);
|
||||||
|
|
||||||
|
CTemperatureLayer temperatureLayer(level, temperature, dewPoint, isobaricLayer.relativeHumidity);
|
||||||
|
temperatureLayers.insert(temperatureLayer);
|
||||||
|
|
||||||
double windDirection = -1 * CMathUtils::rad2deg(std::atan2(-isobaricLayer.windU, isobaricLayer.windV));
|
double windDirection = -1 * CMathUtils::rad2deg(std::atan2(-isobaricLayer.windU, isobaricLayer.windV));
|
||||||
windDirection += 180.0;
|
windDirection += 180.0;
|
||||||
@@ -672,6 +677,15 @@ namespace BlackWxPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CTemperature CWeatherDataGfs::calculateDewPoint(const CTemperature &temperature, double relativeHumidity)
|
||||||
|
{
|
||||||
|
double temperatureInCelsius = temperature.value(CTemperatureUnit::C());
|
||||||
|
double saturationVaporPressure = 6.112 * std::exp((17.67 * temperatureInCelsius)/(temperatureInCelsius + 243.5));
|
||||||
|
double vaporPressure = saturationVaporPressure * ( relativeHumidity / 100.0);
|
||||||
|
double dewPointInCelsius = std::log(vaporPressure / 6.112) * 243.5 / (17.67 - std::log(vaporPressure / 6.112));
|
||||||
|
return { dewPointInCelsius, CTemperatureUnit::C() };
|
||||||
|
}
|
||||||
|
|
||||||
BlackCore::IWeatherData *CWeatherDataGfsFactory::create(QObject *parent)
|
BlackCore::IWeatherData *CWeatherDataGfsFactory::create(QObject *parent)
|
||||||
{
|
{
|
||||||
return new CWeatherDataGfs(parent);
|
return new CWeatherDataGfs(parent);
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
class QNetworkAccessManager;
|
class QNetworkAccessManager;
|
||||||
|
|
||||||
|
namespace BlackMisc { namespace PhysicalQuantities { class CTemperature; }}
|
||||||
|
|
||||||
namespace BlackWxPlugin
|
namespace BlackWxPlugin
|
||||||
{
|
{
|
||||||
namespace Gfs
|
namespace Gfs
|
||||||
@@ -145,6 +147,8 @@ namespace BlackWxPlugin
|
|||||||
void setSurfaceRain(const g2float *fld);
|
void setSurfaceRain(const g2float *fld);
|
||||||
void setSurfaceSnow(const g2float *fld);
|
void setSurfaceSnow(const g2float *fld);
|
||||||
|
|
||||||
|
BlackMisc::PhysicalQuantities::CTemperature calculateDewPoint(const BlackMisc::PhysicalQuantities::CTemperature &temperature, double relativeHumidity);
|
||||||
|
|
||||||
BlackMisc::Weather::CWeatherGrid m_grid;
|
BlackMisc::Weather::CWeatherGrid m_grid;
|
||||||
BlackMisc::PhysicalQuantities::CLength m_maxRange;
|
BlackMisc::PhysicalQuantities::CLength m_maxRange;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user