mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:40:05 +00:00
Create record for loaded NEXRAD file in preparation for storage
This commit is contained in:
parent
85615cfffd
commit
c9e312fd54
12 changed files with 269 additions and 120 deletions
|
|
@ -94,6 +94,8 @@ set(HDR_SETTINGS source/scwx/qt/settings/general_settings.hpp
|
||||||
source/scwx/qt/settings/palette_settings.hpp)
|
source/scwx/qt/settings/palette_settings.hpp)
|
||||||
set(SRC_SETTINGS source/scwx/qt/settings/general_settings.cpp
|
set(SRC_SETTINGS source/scwx/qt/settings/general_settings.cpp
|
||||||
source/scwx/qt/settings/palette_settings.cpp)
|
source/scwx/qt/settings/palette_settings.cpp)
|
||||||
|
set(HDR_TYPES source/scwx/qt/types/radar_product_record.hpp)
|
||||||
|
set(SRC_TYPES source/scwx/qt/types/radar_product_record.cpp)
|
||||||
set(HDR_UI source/scwx/qt/ui/flow_layout.hpp)
|
set(HDR_UI source/scwx/qt/ui/flow_layout.hpp)
|
||||||
set(SRC_UI source/scwx/qt/ui/flow_layout.cpp)
|
set(SRC_UI source/scwx/qt/ui/flow_layout.cpp)
|
||||||
set(HDR_UTIL source/scwx/qt/util/font.hpp
|
set(HDR_UTIL source/scwx/qt/util/font.hpp
|
||||||
|
|
@ -143,6 +145,8 @@ set(PROJECT_SOURCES ${HDR_MAIN}
|
||||||
${SRC_REQUEST}
|
${SRC_REQUEST}
|
||||||
${HDR_SETTINGS}
|
${HDR_SETTINGS}
|
||||||
${SRC_SETTINGS}
|
${SRC_SETTINGS}
|
||||||
|
${HDR_TYPES}
|
||||||
|
${SRC_TYPES}
|
||||||
${HDR_UI}
|
${HDR_UI}
|
||||||
${SRC_UI}
|
${SRC_UI}
|
||||||
${HDR_UTIL}
|
${HDR_UTIL}
|
||||||
|
|
@ -173,6 +177,8 @@ source_group("Header Files\\request" FILES ${HDR_REQUEST})
|
||||||
source_group("Source Files\\request" FILES ${SRC_REQUEST})
|
source_group("Source Files\\request" FILES ${SRC_REQUEST})
|
||||||
source_group("Header Files\\settings" FILES ${HDR_SETTINGS})
|
source_group("Header Files\\settings" FILES ${HDR_SETTINGS})
|
||||||
source_group("Source Files\\settings" FILES ${SRC_SETTINGS})
|
source_group("Source Files\\settings" FILES ${SRC_SETTINGS})
|
||||||
|
source_group("Header Files\\types" FILES ${HDR_TYPES})
|
||||||
|
source_group("Source Files\\types" FILES ${SRC_TYPES})
|
||||||
source_group("Header Files\\ui" FILES ${HDR_UI})
|
source_group("Header Files\\ui" FILES ${HDR_UI})
|
||||||
source_group("Source Files\\ui" FILES ${SRC_UI})
|
source_group("Source Files\\ui" FILES ${SRC_UI})
|
||||||
source_group("Header Files\\util" FILES ${HDR_UTIL})
|
source_group("Header Files\\util" FILES ${HDR_UTIL})
|
||||||
|
|
|
||||||
|
|
@ -226,19 +226,22 @@ void MainWindow::on_actionOpen_triggered()
|
||||||
std::shared_ptr<request::NexradFileRequest> request =
|
std::shared_ptr<request::NexradFileRequest> request =
|
||||||
std::make_shared<request::NexradFileRequest>();
|
std::make_shared<request::NexradFileRequest>();
|
||||||
|
|
||||||
connect(
|
connect( //
|
||||||
request.get(),
|
request.get(),
|
||||||
&request::NexradFileRequest::RequestComplete,
|
&request::NexradFileRequest::RequestComplete,
|
||||||
this,
|
this,
|
||||||
[=](std::shared_ptr<request::NexradFileRequest> request)
|
[=](std::shared_ptr<request::NexradFileRequest> request)
|
||||||
{
|
{
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexradFile =
|
std::shared_ptr<types::RadarProductRecord> record =
|
||||||
request->nexrad_file();
|
request->radar_product_record();
|
||||||
|
std::shared_ptr<wsr88d::Ar2vFile> level2File = nullptr;
|
||||||
|
std::shared_ptr<wsr88d::Level3File> level3File = nullptr;
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::Ar2vFile> level2File =
|
if (record != nullptr)
|
||||||
std::dynamic_pointer_cast<wsr88d::Ar2vFile>(nexradFile);
|
{
|
||||||
std::shared_ptr<wsr88d::Level3File> level3File =
|
level2File = record->level2_file();
|
||||||
std::dynamic_pointer_cast<wsr88d::Level3File>(nexradFile);
|
level3File = record->level3_file();
|
||||||
|
}
|
||||||
|
|
||||||
if (level2File != nullptr)
|
if (level2File != nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
#include <scwx/qt/manager/radar_product_manager.hpp>
|
#include <scwx/qt/manager/radar_product_manager.hpp>
|
||||||
#include <scwx/common/constants.hpp>
|
#include <scwx/common/constants.hpp>
|
||||||
#include <scwx/common/sites.hpp>
|
|
||||||
#include <scwx/qt/config/radar_site.hpp>
|
|
||||||
#include <scwx/util/threads.hpp>
|
#include <scwx/util/threads.hpp>
|
||||||
#include <scwx/util/time.hpp>
|
|
||||||
#include <scwx/wsr88d/nexrad_file_factory.hpp>
|
#include <scwx/wsr88d/nexrad_file_factory.hpp>
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
@ -27,12 +24,6 @@ namespace manager
|
||||||
static const std::string logPrefix_ =
|
static const std::string logPrefix_ =
|
||||||
"[scwx::qt::manager::radar_product_manager] ";
|
"[scwx::qt::manager::radar_product_manager] ";
|
||||||
|
|
||||||
typedef std::function<std::shared_ptr<wsr88d::NexradFile>()>
|
|
||||||
CreateNexradFileFunction;
|
|
||||||
|
|
||||||
static void LoadNexradFile(CreateNexradFileFunction load,
|
|
||||||
std::shared_ptr<request::NexradFileRequest> request);
|
|
||||||
|
|
||||||
static constexpr uint32_t NUM_RADIAL_GATES_0_5_DEGREE =
|
static constexpr uint32_t NUM_RADIAL_GATES_0_5_DEGREE =
|
||||||
common::MAX_0_5_DEGREE_RADIALS * common::MAX_DATA_MOMENT_GATES;
|
common::MAX_0_5_DEGREE_RADIALS * common::MAX_DATA_MOMENT_GATES;
|
||||||
static constexpr uint32_t NUM_RADIAL_GATES_1_DEGREE =
|
static constexpr uint32_t NUM_RADIAL_GATES_1_DEGREE =
|
||||||
|
|
@ -65,6 +56,9 @@ public:
|
||||||
}
|
}
|
||||||
~RadarProductManagerImpl() = default;
|
~RadarProductManagerImpl() = default;
|
||||||
|
|
||||||
|
void
|
||||||
|
StoreRadarProductRecord(std::shared_ptr<types::RadarProductRecord> record);
|
||||||
|
|
||||||
std::string radarId_;
|
std::string radarId_;
|
||||||
bool initialized_;
|
bool initialized_;
|
||||||
|
|
||||||
|
|
@ -214,10 +208,8 @@ void RadarProductManager::Initialize()
|
||||||
void RadarProductManager::LoadData(
|
void RadarProductManager::LoadData(
|
||||||
std::istream& is, std::shared_ptr<request::NexradFileRequest> request)
|
std::istream& is, std::shared_ptr<request::NexradFileRequest> request)
|
||||||
{
|
{
|
||||||
LoadNexradFile(
|
LoadNexradFile([=, &is]() -> std::shared_ptr<wsr88d::NexradFile>
|
||||||
[=, &is]() -> std::shared_ptr<wsr88d::NexradFile> {
|
{ return wsr88d::NexradFileFactory::Create(is); },
|
||||||
return wsr88d::NexradFileFactory::Create(is);
|
|
||||||
},
|
|
||||||
request);
|
request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,14 +217,13 @@ void RadarProductManager::LoadFile(
|
||||||
const std::string& filename,
|
const std::string& filename,
|
||||||
std::shared_ptr<request::NexradFileRequest> request)
|
std::shared_ptr<request::NexradFileRequest> request)
|
||||||
{
|
{
|
||||||
LoadNexradFile(
|
LoadNexradFile([=]() -> std::shared_ptr<wsr88d::NexradFile>
|
||||||
[=]() -> std::shared_ptr<wsr88d::NexradFile> {
|
{ return wsr88d::NexradFileFactory::Create(filename); },
|
||||||
return wsr88d::NexradFileFactory::Create(filename);
|
|
||||||
},
|
|
||||||
request);
|
request);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LoadNexradFile(CreateNexradFileFunction load,
|
void RadarProductManager::LoadNexradFile(
|
||||||
|
CreateNexradFileFunction load,
|
||||||
std::shared_ptr<request::NexradFileRequest> request)
|
std::shared_ptr<request::NexradFileRequest> request)
|
||||||
{
|
{
|
||||||
scwx::util::async(
|
scwx::util::async(
|
||||||
|
|
@ -241,45 +232,19 @@ static void LoadNexradFile(CreateNexradFileFunction load,
|
||||||
std::unique_lock lock(fileLoadMutex_);
|
std::unique_lock lock(fileLoadMutex_);
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexradFile = load();
|
std::shared_ptr<wsr88d::NexradFile> nexradFile = load();
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::Ar2vFile> level2File =
|
std::shared_ptr<types::RadarProductRecord> record = nullptr;
|
||||||
std::dynamic_pointer_cast<wsr88d::Ar2vFile>(nexradFile);
|
|
||||||
std::shared_ptr<wsr88d::Level3File> level3File =
|
|
||||||
std::dynamic_pointer_cast<wsr88d::Level3File>(nexradFile);
|
|
||||||
|
|
||||||
bool fileValid = false;
|
bool fileValid = (nexradFile != nullptr);
|
||||||
std::string radarId = "????";
|
|
||||||
std::string siteId = "???";
|
|
||||||
uint16_t julianDate = 0;
|
|
||||||
uint32_t milliseconds = 0;
|
|
||||||
|
|
||||||
std::chrono::system_clock::time_point time;
|
|
||||||
|
|
||||||
if (level2File != nullptr)
|
|
||||||
{
|
|
||||||
fileValid = true;
|
|
||||||
radarId = level2File->icao();
|
|
||||||
siteId = common::GetSiteId(radarId);
|
|
||||||
julianDate = level2File->julian_date();
|
|
||||||
milliseconds = level2File->milliseconds();
|
|
||||||
}
|
|
||||||
else if (level3File != nullptr)
|
|
||||||
{
|
|
||||||
fileValid = true;
|
|
||||||
siteId = level3File->wmo_header()->product_designator();
|
|
||||||
radarId = config::GetRadarIdFromSiteId(siteId);
|
|
||||||
julianDate = level3File->message()->header().date_of_message();
|
|
||||||
milliseconds =
|
|
||||||
level3File->message()->header().time_of_message() * 1000u;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fileValid)
|
if (fileValid)
|
||||||
{
|
{
|
||||||
time = util::TimePoint(julianDate, milliseconds);
|
record = types::RadarProductRecord::Create(nexradFile);
|
||||||
|
|
||||||
std::shared_ptr<RadarProductManager> manager =
|
std::shared_ptr<RadarProductManager> manager =
|
||||||
RadarProductManager::Instance(radarId);
|
RadarProductManager::Instance(record->radar_id());
|
||||||
|
|
||||||
|
manager->p->StoreRadarProductRecord(record);
|
||||||
|
|
||||||
// TODO: Store and index
|
|
||||||
// TODO: When to initialize?
|
// TODO: When to initialize?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -287,10 +252,7 @@ static void LoadNexradFile(CreateNexradFileFunction load,
|
||||||
|
|
||||||
if (request != nullptr)
|
if (request != nullptr)
|
||||||
{
|
{
|
||||||
request->set_nexrad_file(nexradFile);
|
request->set_radar_product_record(record);
|
||||||
request->set_radar_id(radarId);
|
|
||||||
request->set_site_id(siteId);
|
|
||||||
request->set_time(time);
|
|
||||||
emit request->RequestComplete(request);
|
emit request->RequestComplete(request);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -317,6 +279,12 @@ void RadarProductManager::LoadLevel2Data(const std::string& filename)
|
||||||
emit Level2DataLoaded();
|
emit Level2DataLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RadarProductManagerImpl::StoreRadarProductRecord(
|
||||||
|
std::shared_ptr<types::RadarProductRecord> record)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
std::tuple<std::shared_ptr<wsr88d::rda::ElevationScan>,
|
std::tuple<std::shared_ptr<wsr88d::rda::ElevationScan>,
|
||||||
float,
|
float,
|
||||||
std::vector<float>>
|
std::vector<float>>
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
#include <scwx/common/types.hpp>
|
#include <scwx/common/types.hpp>
|
||||||
#include <scwx/qt/config/radar_site.hpp>
|
#include <scwx/qt/config/radar_site.hpp>
|
||||||
#include <scwx/qt/request/nexrad_file_request.hpp>
|
#include <scwx/qt/request/nexrad_file_request.hpp>
|
||||||
|
#include <scwx/qt/types/radar_product_record.hpp>
|
||||||
#include <scwx/wsr88d/ar2v_file.hpp>
|
#include <scwx/wsr88d/ar2v_file.hpp>
|
||||||
#include <scwx/wsr88d/level3_file.hpp>
|
#include <scwx/wsr88d/level3_file.hpp>
|
||||||
|
|
||||||
|
|
@ -58,6 +59,13 @@ signals:
|
||||||
void Level2DataLoaded();
|
void Level2DataLoaded();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
typedef std::function<std::shared_ptr<wsr88d::NexradFile>()>
|
||||||
|
CreateNexradFileFunction;
|
||||||
|
|
||||||
|
static void
|
||||||
|
LoadNexradFile(CreateNexradFileFunction load,
|
||||||
|
std::shared_ptr<request::NexradFileRequest> request);
|
||||||
|
|
||||||
std::unique_ptr<RadarProductManagerImpl> p;
|
std::unique_ptr<RadarProductManagerImpl> p;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,17 +15,11 @@ static const std::string logPrefix_ =
|
||||||
class NexradFileRequestImpl
|
class NexradFileRequestImpl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit NexradFileRequestImpl() :
|
explicit NexradFileRequestImpl() : radarProductRecord_ {nullptr} {}
|
||||||
nexradFile_ {nullptr}, radarId_ {}, siteId_ {}, time_ {}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
~NexradFileRequestImpl() {}
|
~NexradFileRequestImpl() {}
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexradFile_;
|
std::shared_ptr<types::RadarProductRecord> radarProductRecord_;
|
||||||
std::string radarId_;
|
|
||||||
std::string siteId_;
|
|
||||||
std::chrono::system_clock::time_point time_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NexradFileRequest::NexradFileRequest() :
|
NexradFileRequest::NexradFileRequest() :
|
||||||
|
|
@ -34,45 +28,16 @@ NexradFileRequest::NexradFileRequest() :
|
||||||
}
|
}
|
||||||
NexradFileRequest::~NexradFileRequest() = default;
|
NexradFileRequest::~NexradFileRequest() = default;
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::NexradFile> NexradFileRequest::nexrad_file() const
|
std::shared_ptr<types::RadarProductRecord>
|
||||||
|
NexradFileRequest::radar_product_record() const
|
||||||
{
|
{
|
||||||
return p->nexradFile_;
|
return p->radarProductRecord_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string NexradFileRequest::radar_id() const
|
void NexradFileRequest::set_radar_product_record(
|
||||||
|
std::shared_ptr<types::RadarProductRecord> record)
|
||||||
{
|
{
|
||||||
return p->radarId_;
|
p->radarProductRecord_ = record;
|
||||||
}
|
|
||||||
|
|
||||||
std::string NexradFileRequest::site_id() const
|
|
||||||
{
|
|
||||||
return p->siteId_;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::chrono::system_clock::time_point NexradFileRequest::time() const
|
|
||||||
{
|
|
||||||
return p->time_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NexradFileRequest::set_nexrad_file(
|
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexradFile)
|
|
||||||
{
|
|
||||||
p->nexradFile_ = nexradFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NexradFileRequest::set_radar_id(const std::string& radarId)
|
|
||||||
{
|
|
||||||
p->radarId_ = radarId;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NexradFileRequest::set_site_id(const std::string& siteId)
|
|
||||||
{
|
|
||||||
p->siteId_ = siteId;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NexradFileRequest::set_time(std::chrono::system_clock::time_point time)
|
|
||||||
{
|
|
||||||
p->time_ = time;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace request
|
} // namespace request
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <scwx/wsr88d/nexrad_file.hpp>
|
#include <scwx/qt/types/radar_product_record.hpp>
|
||||||
|
|
||||||
#include <chrono>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
@ -24,15 +23,10 @@ public:
|
||||||
explicit NexradFileRequest();
|
explicit NexradFileRequest();
|
||||||
~NexradFileRequest();
|
~NexradFileRequest();
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexrad_file() const;
|
std::shared_ptr<types::RadarProductRecord> radar_product_record() const;
|
||||||
std::string radar_id() const;
|
|
||||||
std::string site_id() const;
|
|
||||||
std::chrono::system_clock::time_point time() const;
|
|
||||||
|
|
||||||
void set_nexrad_file(std::shared_ptr<wsr88d::NexradFile> nexradFile);
|
void
|
||||||
void set_radar_id(const std::string& radarId);
|
set_radar_product_record(std::shared_ptr<types::RadarProductRecord> record);
|
||||||
void set_site_id(const std::string& siteId);
|
|
||||||
void set_time(std::chrono::system_clock::time_point time);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<NexradFileRequestImpl> p;
|
std::unique_ptr<NexradFileRequestImpl> p;
|
||||||
|
|
|
||||||
148
scwx-qt/source/scwx/qt/types/radar_product_record.cpp
Normal file
148
scwx-qt/source/scwx/qt/types/radar_product_record.cpp
Normal file
|
|
@ -0,0 +1,148 @@
|
||||||
|
#include <scwx/qt/types/radar_product_record.hpp>
|
||||||
|
#include <scwx/qt/config/radar_site.hpp>
|
||||||
|
#include <scwx/common/sites.hpp>
|
||||||
|
#include <scwx/util/time.hpp>
|
||||||
|
|
||||||
|
#include <boost/log/trivial.hpp>
|
||||||
|
|
||||||
|
namespace scwx
|
||||||
|
{
|
||||||
|
namespace qt
|
||||||
|
{
|
||||||
|
namespace types
|
||||||
|
{
|
||||||
|
|
||||||
|
static const std::string logPrefix_ =
|
||||||
|
"[scwx::qt::types::radar_product_record] ";
|
||||||
|
|
||||||
|
class RadarProductRecordImpl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit RadarProductRecordImpl(
|
||||||
|
std::shared_ptr<wsr88d::NexradFile> nexradFile) :
|
||||||
|
nexradFile_ {nexradFile},
|
||||||
|
radarId_ {"????"},
|
||||||
|
radarProduct_ {"???"},
|
||||||
|
radarProductGroup_ {common::RadarProductGroup::Unknown},
|
||||||
|
siteId_ {"???"},
|
||||||
|
time_ {util::TimePoint(0, 0)}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~RadarProductRecordImpl() {}
|
||||||
|
|
||||||
|
std::shared_ptr<wsr88d::NexradFile> nexradFile_;
|
||||||
|
std::string radarId_;
|
||||||
|
std::string radarProduct_;
|
||||||
|
common::RadarProductGroup radarProductGroup_;
|
||||||
|
std::string siteId_;
|
||||||
|
std::chrono::system_clock::time_point time_;
|
||||||
|
};
|
||||||
|
|
||||||
|
RadarProductRecord::RadarProductRecord(
|
||||||
|
std::shared_ptr<wsr88d::NexradFile> nexradFile) :
|
||||||
|
p(std::make_unique<RadarProductRecordImpl>(nexradFile))
|
||||||
|
{
|
||||||
|
std::shared_ptr<wsr88d::Ar2vFile> level2File = level2_file();
|
||||||
|
std::shared_ptr<wsr88d::Level3File> level3File = level3_file();
|
||||||
|
|
||||||
|
uint16_t julianDate = 0;
|
||||||
|
uint32_t milliseconds = 0;
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point time;
|
||||||
|
|
||||||
|
if (level2File != nullptr)
|
||||||
|
{
|
||||||
|
p->radarProductGroup_ = common::RadarProductGroup::Level2;
|
||||||
|
p->radarId_ = level2File->icao();
|
||||||
|
p->siteId_ = common::GetSiteId(p->radarId_);
|
||||||
|
julianDate = level2File->julian_date();
|
||||||
|
milliseconds = level2File->milliseconds();
|
||||||
|
}
|
||||||
|
else if (level3File != nullptr)
|
||||||
|
{
|
||||||
|
p->radarProductGroup_ = common::RadarProductGroup::Level3;
|
||||||
|
p->radarProduct_ = level3File->wmo_header()->product_category();
|
||||||
|
p->siteId_ = level3File->wmo_header()->product_designator();
|
||||||
|
p->radarId_ = config::GetRadarIdFromSiteId(p->siteId_);
|
||||||
|
|
||||||
|
auto descriptionBlock = level3File->message()->description_block();
|
||||||
|
|
||||||
|
if (descriptionBlock != nullptr)
|
||||||
|
{
|
||||||
|
julianDate = descriptionBlock->volume_scan_date();
|
||||||
|
milliseconds = descriptionBlock->volume_scan_start_time() * 1000u;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
julianDate = level3File->message()->header().date_of_message();
|
||||||
|
milliseconds =
|
||||||
|
level3File->message()->header().time_of_message() * 1000u;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
time = util::TimePoint(julianDate, milliseconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
RadarProductRecord::~RadarProductRecord() = default;
|
||||||
|
|
||||||
|
RadarProductRecord::RadarProductRecord(RadarProductRecord&&) noexcept = default;
|
||||||
|
RadarProductRecord&
|
||||||
|
RadarProductRecord::operator=(RadarProductRecord&&) noexcept = default;
|
||||||
|
|
||||||
|
std::shared_ptr<wsr88d::Ar2vFile> RadarProductRecord::level2_file() const
|
||||||
|
{
|
||||||
|
return std::dynamic_pointer_cast<wsr88d::Ar2vFile>(p->nexradFile_);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<wsr88d::Level3File> RadarProductRecord::level3_file() const
|
||||||
|
{
|
||||||
|
return std::dynamic_pointer_cast<wsr88d::Level3File>(p->nexradFile_);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<wsr88d::NexradFile> RadarProductRecord::nexrad_file() const
|
||||||
|
{
|
||||||
|
return p->nexradFile_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string RadarProductRecord::radar_id() const
|
||||||
|
{
|
||||||
|
return p->radarId_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string RadarProductRecord::radar_product() const
|
||||||
|
{
|
||||||
|
return p->radarProduct_;
|
||||||
|
}
|
||||||
|
|
||||||
|
common::RadarProductGroup RadarProductRecord::radar_product_group() const
|
||||||
|
{
|
||||||
|
return p->radarProductGroup_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string RadarProductRecord::site_id() const
|
||||||
|
{
|
||||||
|
return p->siteId_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point RadarProductRecord::time() const
|
||||||
|
{
|
||||||
|
return p->time_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<RadarProductRecord>
|
||||||
|
RadarProductRecord::Create(std::shared_ptr<wsr88d::NexradFile> nexradFile)
|
||||||
|
{
|
||||||
|
std::shared_ptr<RadarProductRecord> record = nullptr;
|
||||||
|
|
||||||
|
if (nexradFile != nullptr)
|
||||||
|
{
|
||||||
|
record = std::make_shared<RadarProductRecord>(nexradFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace types
|
||||||
|
} // namespace qt
|
||||||
|
} // namespace scwx
|
||||||
49
scwx-qt/source/scwx/qt/types/radar_product_record.hpp
Normal file
49
scwx-qt/source/scwx/qt/types/radar_product_record.hpp
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <scwx/common/products.hpp>
|
||||||
|
#include <scwx/wsr88d/ar2v_file.hpp>
|
||||||
|
#include <scwx/wsr88d/level3_file.hpp>
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace scwx
|
||||||
|
{
|
||||||
|
namespace qt
|
||||||
|
{
|
||||||
|
namespace types
|
||||||
|
{
|
||||||
|
|
||||||
|
class RadarProductRecordImpl;
|
||||||
|
|
||||||
|
class RadarProductRecord
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit RadarProductRecord(std::shared_ptr<wsr88d::NexradFile> nexradFile);
|
||||||
|
~RadarProductRecord();
|
||||||
|
|
||||||
|
RadarProductRecord(const RadarProductRecord&) = delete;
|
||||||
|
RadarProductRecord& operator=(const RadarProductRecord&) = delete;
|
||||||
|
|
||||||
|
RadarProductRecord(RadarProductRecord&&) noexcept;
|
||||||
|
RadarProductRecord& operator=(RadarProductRecord&&) noexcept;
|
||||||
|
|
||||||
|
std::shared_ptr<wsr88d::Ar2vFile> level2_file() const;
|
||||||
|
std::shared_ptr<wsr88d::Level3File> level3_file() const;
|
||||||
|
std::shared_ptr<wsr88d::NexradFile> nexrad_file() const;
|
||||||
|
std::string radar_id() const;
|
||||||
|
std::string radar_product() const;
|
||||||
|
common::RadarProductGroup radar_product_group() const;
|
||||||
|
std::string site_id() const;
|
||||||
|
std::chrono::system_clock::time_point time() const;
|
||||||
|
|
||||||
|
static std::shared_ptr<RadarProductRecord>
|
||||||
|
Create(std::shared_ptr<wsr88d::NexradFile> nexradFile);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<RadarProductRecordImpl> p;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace types
|
||||||
|
} // namespace qt
|
||||||
|
} // namespace scwx
|
||||||
|
|
@ -102,7 +102,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>scwx::qt::main::MainWindow</name>
|
<name>scwx::qt::main::MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../source/scwx/qt/main/main_window.cpp" line="256"/>
|
<location filename="../source/scwx/qt/main/main_window.cpp" line="259"/>
|
||||||
<source>Unrecognized NEXRAD Product:</source>
|
<source>Unrecognized NEXRAD Product:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <scwx/wsr88d/rpg/level3_message.hpp>
|
#include <scwx/wsr88d/rpg/level3_message.hpp>
|
||||||
#include <scwx/wsr88d/rpg/product_description_block.hpp>
|
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include <scwx/awips/message.hpp>
|
#include <scwx/awips/message.hpp>
|
||||||
#include <scwx/wsr88d/rpg/level3_message_header.hpp>
|
#include <scwx/wsr88d/rpg/level3_message_header.hpp>
|
||||||
|
#include <scwx/wsr88d/rpg/product_description_block.hpp>
|
||||||
|
|
||||||
namespace scwx
|
namespace scwx
|
||||||
{
|
{
|
||||||
|
|
@ -32,6 +33,8 @@ public:
|
||||||
|
|
||||||
void set_header(Level3MessageHeader&& header);
|
void set_header(Level3MessageHeader&& header);
|
||||||
|
|
||||||
|
virtual std::shared_ptr<ProductDescriptionBlock> description_block() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Level3MessageImpl> p;
|
std::unique_ptr<Level3MessageImpl> p;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,12 @@ void Level3Message::set_header(Level3MessageHeader&& header)
|
||||||
p->header_ = std::move(header);
|
p->header_ = std::move(header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<ProductDescriptionBlock>
|
||||||
|
Level3Message::description_block() const
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace rpg
|
} // namespace rpg
|
||||||
} // namespace wsr88d
|
} // namespace wsr88d
|
||||||
} // namespace scwx
|
} // namespace scwx
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue