diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp index d25bb28d..b51d5c70 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -1507,10 +1507,10 @@ RadarProductManager::GetLevel2Data(wsr88d::rda::DataBlockType dataBlockType, if (recordRadarData != nullptr) { - auto& radarData0 = (*recordRadarData)[0]; - auto collectionTime = + auto& radarData0 = (*recordRadarData)[0]; + auto collectionTime = std::chrono::floor( scwx::util::TimePoint(radarData0->modified_julian_date(), - radarData0->collection_time()); + radarData0->collection_time())); // Find the newest radar data, not newer than the selected time if (radarData == nullptr || diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index f7ba99ae..cc501408 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -1801,7 +1801,16 @@ void MapWidgetImpl::RadarProductManagerConnect() (group == common::RadarProductGroup::Level2 || context_->radar_product() == product)) { - widget_->SelectRadarProduct(record); + if (group == common::RadarProductGroup::Level2) + { + // Level 2 products may have multiple time points, + // ensure the latest is selected + widget_->SelectRadarProduct(group, product); + } + else + { + widget_->SelectRadarProduct(record); + } } }); } diff --git a/wxdata/source/scwx/wsr88d/ar2v_file.cpp b/wxdata/source/scwx/wsr88d/ar2v_file.cpp index bdd1bcfc..1069fbcd 100644 --- a/wxdata/source/scwx/wsr88d/ar2v_file.cpp +++ b/wxdata/source/scwx/wsr88d/ar2v_file.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #if defined(__GNUC__) # pragma GCC diagnostic pop @@ -187,10 +188,12 @@ Ar2vFile::GetElevationScan(rda::DataBlockType dataBlockType, for (auto& scan : elevationScans) { - auto& scanTime = scan.first; + auto scanTime = std::chrono::floor(scan.first); if (elevationScan == nullptr || - (scanTime <= time && scanTime > foundTime)) + ((scanTime <= time || + time == std::chrono::system_clock::time_point {}) && + scanTime > foundTime)) { elevationScan = scan.second; foundTime = scanTime; @@ -253,10 +256,13 @@ bool Ar2vFile::LoadData(std::istream& is) if (dataValid) { + auto timePoint = util::TimePoint(p->julianDate_, p->milliseconds_); + logger_->debug("Filename: {}", p->tapeFilename_); logger_->debug("Extension: {}", p->extensionNumber_); - logger_->debug("Date: {}", p->julianDate_); - logger_->debug("Time: {}", p->milliseconds_); + logger_->debug("Date: {} ({:%Y-%m-%d})", p->julianDate_, timePoint); + logger_->debug( + "Time: {} ({:%H:%M:%S})", p->milliseconds_, timePoint); logger_->debug("ICAO: {}", p->icao_); size_t decompressedRecords = p->DecompressLDMRecords(is);