From bb0419aa3eb87e0982ea77a7c7880f4b5fb7211b Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 1 Jan 2024 23:05:56 -0600 Subject: [PATCH] Start angle should properly reflect the edge of the bin instead of the middle --- .../scwx/qt/manager/radar_product_manager.cpp | 4 +- .../scwx/qt/view/level2_product_view.cpp | 69 ++++++++----------- .../scwx/qt/view/level3_radial_view.cpp | 19 +---- 3 files changed, 31 insertions(+), 61 deletions(-) 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 cbeb0fb0..bc5e8b98 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -440,7 +440,7 @@ void RadarProductManager::Initialize() const uint16_t radial = static_cast(radialGate / common::MAX_DATA_MOMENT_GATES); - const float angle = radial * 0.5f - 0.25f; // 0.5 degree radial + const float angle = radial * 0.5f; // 0.5 degree radial const float range = (gate + 1) * gateSize; const size_t offset = radialGate * 2; @@ -477,7 +477,7 @@ void RadarProductManager::Initialize() const uint16_t radial = static_cast(radialGate / common::MAX_DATA_MOMENT_GATES); - const float angle = radial * 1.0f - 0.5f; // 1 degree radial + const float angle = radial * 1.0f; // 1 degree radial const float range = (gate + 1) * gateSize; const size_t offset = radialGate * 2; diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp index 6f13f3fe..51280987 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp @@ -738,51 +738,38 @@ void Level2ProductViewImpl::ComputeCoordinates( auto radials = boost::irange(0u, numRadials); auto gates = boost::irange(0u, numRangeBins); - std::for_each( - std::execution::par_unseq, - radials.begin(), - radials.end(), - [&](std::uint32_t radial) - { - // Angles are ordered clockwise, delta should be positive. Only correct - // less than -90 degrees, this should cover any "overlap" scenarios. - float deltaAngle = - (radial == 0) ? (*radarData)[0]->azimuth_angle() - - (*radarData)[numRadials - 1]->azimuth_angle() : - (*radarData)[radial]->azimuth_angle() - - (*radarData)[radial - 1]->azimuth_angle(); - while (deltaAngle < -90.0f) - { - deltaAngle += 360.0f; - } + std::for_each(std::execution::par_unseq, + radials.begin(), + radials.end(), + [&](std::uint32_t radial) + { + const float angle = (*radarData)[radial]->azimuth_angle(); - const float angle = - (*radarData)[radial]->azimuth_angle() - (deltaAngle * 0.5f); + std::for_each(std::execution::par_unseq, + gates.begin(), + gates.end(), + [&](std::uint32_t gate) + { + const std::uint32_t radialGate = + radial * common::MAX_DATA_MOMENT_GATES + + gate; + const float range = (gate + 1) * gateSize; + const std::size_t offset = radialGate * 2; - std::for_each(std::execution::par_unseq, - gates.begin(), - gates.end(), - [&](std::uint32_t gate) - { - const std::uint32_t radialGate = - radial * common::MAX_DATA_MOMENT_GATES + gate; - const float range = (gate + 1) * gateSize; - const std::size_t offset = radialGate * 2; + double latitude; + double longitude; - double latitude; - double longitude; + geodesic.Direct(radarLatitude, + radarLongitude, + angle, + range, + latitude, + longitude); - geodesic.Direct(radarLatitude, - radarLongitude, - angle, - range, - latitude, - longitude); - - coordinates_[offset] = latitude; - coordinates_[offset + 1] = longitude; - }); - }); + coordinates_[offset] = latitude; + coordinates_[offset + 1] = longitude; + }); + }); timer.stop(); logger_->debug("Coordinates calculated in {}", timer.format(6, "%ws")); } diff --git a/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp b/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp index 13174135..0e10b5dc 100644 --- a/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp @@ -454,24 +454,7 @@ void Level3RadialViewImpl::ComputeCoordinates( radials.end(), [&](std::uint32_t radial) { - float deltaAngle; - if (radial == 0) - { - // Angles are ordered clockwise, delta should be positive - deltaAngle = radialData->start_angle(0) - - radialData->start_angle(numRadials - 1); - while (deltaAngle < 0.0f) - { - deltaAngle += 360.0f; - } - } - else - { - deltaAngle = radialData->delta_angle(radial); - } - - const float angle = - radialData->start_angle(radial) - (deltaAngle * 0.5f); + const float angle = radialData->start_angle(radial); std::for_each(std::execution::par_unseq, gates.begin(),