Coder Social home page Coder Social logo

dpaulat / supercell-wx Goto Github PK

View Code? Open in Web Editor NEW
89.0 89.0 14.0 3.22 MB

Supercell Wx is a free, open source advanced weather radar viewer.

Home Page: https://supercell-wx.rtfd.io

License: MIT License

CMake 2.36% D 0.03% GLSL 0.42% C++ 96.59% Batchfile 0.03% Python 0.53% Shell 0.04%
radar weather

supercell-wx's People

Contributors

aware70 avatar dpaulat avatar jtleniger avatar renovate[bot] avatar wxfanatics avatar zachdehooge avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

supercell-wx's Issues

Support Out of Sequence Event Updates

If events are updated out of sequence, the most recently received update will incorrectly be treated as the newest. This is not expected to happen during normal retrieval of text products, but can easily occur when loading products manually.

Zone File Update - September 19, 2023

Zone and county files will update effective September 19, 2023. Final versions are expected to be posted by July 18. The new files need integrated.

Refresh fails at start of UTC day

Auto-refresh will intermittently fail at the start of a new UTC day, and disable refresh due to "no products available". The product must be selected again in order to re-enable refresh.

Alert Hover Status

When an alert/warning is hovered over on the map, a status window should be displayed giving additional information about the alert. There should be a clickable action to pull up the full alert information, similar to the tabular view.

A short option should be available to display only Impact-Based Warning Tags, as opposed to the entire text message segment.

GL Context Resource Cleanup

Cleanup duplicative resource usage between map instances that use a shared OpenGL context. Consider caching certain resources to avoid having to reload when certain settings change.

Launch options

It would be nice to be able to pass a flag on my shortcut to disable the console window for those of us uninterested in seeing it.

Radar Product Doesn't Animate on Slow Sweep

When the radar product ComputeSweep() function takes a long time (~0.5 seconds or more), animation at higher speeds fails to render updated scans. This is seen on Linux when animating level 2 products, due to #54.

This is likely due to a race condition involving computing the sweep. It could be due to requesting another product too quickly, or another reason.

If the product renders quickly enough, or the animation is slow enough (loop speed), the issue is not seen.

Linux Qt Deployment

Qt Plugins are not deployed with the Linux package. As a result, the application fails to run without these already installed and locatable in the current environment.

This should be resolved using the existing deploy mechanism going to Qt 6.5, but needs to be verified.

Add Radar Product Info

When hovering over the time in the upper right of the map, expand the status window to display detailed radar product information.

Linux Parallel Algorithms Running in Serial

There is extensive use of the parallel STL using C++17 execution policies. The use of these algorithms behave as expected when compiling for Windows using MSVC.

When compiled for Linux using GCC, the parallel STL defaults to a serial backend, causing poor performance of parallel algorithms.

The Linux build should be updated to use a parallel backend, such as TBB, or another suitable parallel processing mechanism.

Color Table Legend

The color table displayed on the map should have a legend. Consider flipping from horizontal to vertical with an inset. This is likely to uncover scaling issues with various products.

Level 3 radial count other than 360/720 not supported

When a level 3 file is loaded with a radial count other than 360 or 720, the product will not display.

Debug Log:

[2023-05-24 22:46:06.096] [68496] [debug] [scwx::qt::manager::radar_product_manager] LoadProviderData: KLSX, L3, N0C, 2023-05-25 03:37:09
[2023-05-24 22:46:06.097] [68496] [debug] [scwx::provider::aws_nexrad_data_provider] FindKey: 2023-05-25 03:44:16
[2023-05-24 22:46:06.230] [68496] [debug] [scwx::wsr88d::level3_file] Loading Data
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] Data Type: SD
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] ICAO:      KLSX
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] Date/Time: 250344
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] Category:  N0B
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::level3_file] Site ID:   LSX
[2023-05-24 22:46:06.231] [68496] [debug] [scwx::wsr88d::rpg::level3_message_factory] Found Message 153
[2023-05-24 22:46:06.271] [68496] [debug] [scwx::wsr88d::rpg::graphic_product_message] Loading Blocks
[2023-05-24 22:46:06.272] [68496] [debug] [scwx::wsr88d::rpg::graphic_product_message] Product symbology block valid: true
[2023-05-24 22:46:06.272] [68496] [debug] [scwx::qt::manager::radar_product_manager] Initialize()
[2023-05-24 22:46:06.399] [68496] [debug] [scwx::qt::manager::radar_product_manager] Coordinates (0.5 degree) calculated in 0.126764s
[2023-05-24 22:46:06.458] [68496] [debug] [scwx::qt::manager::radar_product_manager] Coordinates (1 degree) calculated in 0.058265s
[2023-05-24 22:46:06.458] [68496] [debug] [scwx::qt::manager::radar_product_manager] StoreRadarProductRecord()
[2023-05-24 22:46:06.459] [68496] [debug] [scwx::provider::aws_nexrad_data_provider] FindKey: 2023-05-25 03:37:09
[2023-05-24 22:46:06.459] [67428] [debug] [scwx::qt::map::map_widget] SelectRadarProduct: KLSX, L3, N0B, 2023-05-25 03:44:16
[2023-05-24 22:46:06.718] [68496] [debug] [scwx::qt::view::level3_radial_view] ComputeSweep()
[2023-05-24 22:46:06.718] [68496] [warning] [scwx::qt::view::level3_radial_view] Unsupported number of radials: 719

Animate warnings

Warnings should be animated along with the radar scans. The timeline manager emits a SelectedTimeUpdated() signal, which can be used to render warnings active at the selected time.

Alert Update Crash to Desktop

I've experienced a rare (usually no more frequent than once per 24 hours of runtime) crash to desktop with handling of alert updates.

std::chrono::system_clock::time_point
AlertModelImpl::GetEndTime(const types::TextEventKey& key)
{
auto messageList = manager::TextEventManager::Instance()->message_list(key);
auto& lastMessage = messageList.back();
size_t segmentCount = lastMessage->segment_count();
auto lastSegment = lastMessage->segment(segmentCount - 1);
return lastSegment->header_->vtecString_[0].pVtec_.event_end();
}

When line 415 above is executed, the application may crash if the message list for a key is empty. There should be two fixes:

  1. Handle the case if the message list is empty, and return a default value. This will prevent the crash, but still may result in erroneous behavior.
  2. Determine why message list is empty. This should never happen for a non-default/valid key.

Display Scaling Issues

If the Windows display scale is set to anything other than 100%, UI elements do not display at the correct position.

Linux Runpath

The Linux build should set the rpath or runpath of the executable in order to eliminate the need to set LD_LIBRARY_PATH when running.

Add County Boundaries

County boundaries are needed on the map. This should be a selectable option. Layer ordering of boundaries vs. radar image seems appropriate, but coastlines are not visible underneath a radar image.

Open Source Licenses

Display open source licenses and other credits in the About dialog (sub-dialog) acknowledgements markdown

Support for NWS Local Storm Reports

Add support for NWS Local Storm Reports as described at https://www.spc.noaa.gov/climo/online/

A storm report should display on the map. When hovered over, additional information about the storm report should be displayed.

Storm reports should also be available in table format, similar to warnings. Maybe group them under alerts, using a separate tab?

Double click alert navigation

When double clicking an alert in the alert table, it should either "Go" or "View" the alert (default "Go", configurable in settings).

Support MapTiler

Currently only Mapbox is supported as a tile source. Add support for MapTiler. Consider making this flexible for custom map sources as well, as supported by the MapLibre library.

Collapsible Groups

As more options become available on the side panel, collapsible groups should be implemented

  • Radar and animation toolboxes should be combined
  • Save which groups are collapsed/expanded to settings

Alert Tones

Add a tone for severe weather alerts.

  • Alert tones should be off by default
  • Alert tones should be configurable by alert type
  • Alert tones should be configurable by location
    • Any location
    • Manually selected latitude/longitude or point on map
    • GPS location (Requires #13)
    • County
  • Alert tones should be customizable
  • Alert tones may use the EAS two tone alert by default:

A new library will be required to play audio, with multiple formats preferred (e.g., ogg, mp3, wav, etc.). Qt Multimedia should be given consideration along with lighter weight options. Note GPL dependencies must be avoided.

To monitor for updated alerts, a connection to TextEventManager::AlertUpdated can be made (see alert_layer.cpp as an example).

Save map style in settings

The most recently used map style should be saved in the settings, similar to the last product selected.

Alert Dock Refresh

The alert dock does not always refresh, and warning display has a tendency to become stale.

Map Cursor Info

When moving the mouse cursor over the map, information about the hovered location should be displayed, including latitude/longitude and radar bin data.

Lightning data

Would like to see lightning strike data as option to show.

image

Asynchronous Threads Outlive Parent Objects

Asynchronous threads are outliving their parents. Some of this has been mitigated with the use of mutexes, but not completely. Because the thread pools are managed outside the object lifecycle, work posted to boost::asio does not ensure the completion prior to parent objects being destroyed - this must be managed by the objects. This is becoming more apparent now that animation is implemented, and the chance of a crash upon object destruction is increasing.

Thread pools should instead be managed by the objects that spawn threads. An example and partial fix is in 1c159a3.

Level 2 Data Rocks

Level 2 products appear to rock back and forth as the frames animate.

Currently, the level 2 rendering takes the start angle, and assumes 0.5 degree or 1 degree radials. However, the angle can vary between radials and scans, so this must be calculated every frame.

The solution will likely be similar to that in 9c44257, but I expect all frames must be recalculated, instead of non-standard ones.

Is the discord available to the public?

I joined the discord server listed in the readme twice, and both times it had disappeared from my list. Is it an issue on my end or had I been kicked?

Thanks!

Add Timeline Animation

Add a timeline to the application. This feature should allow the display of animated radar data in a specific time window, in addition to historical data. All products should be synchronized on the timeline as available.

Completed for Prerelease 1:

  • Archive time selection
  • Step through volume scans
  • Animated radar image
  • Adjust number of stored products based on loop time
  • Add limits to loop speed
  • Adjust time listing pruning from oldest first to oldest used first, omitting pruning yesterday and today
  • Fix warning start time of Unix epoch when missing initial text product
  • Auto refresh shouldn't replace stepped or archive display
  • Fix level 2 display

Completed for Prerelease 3:

  • Make delay between loop cycles configurable
  • Older archive views don't work properly
    • Partially fixed. Tested OK with 2013 Level 2 data. Will require additional changes for ~2008 and prior (support for Level 2 Message Type 1)

Required for completion:

  • Save loop time, speed, and delay in settings
  • Fix step begin/end when not all products have the same volume times
  • When playing a live view, auto update incorrectly states "Disabled"
  • Fix switching radar sites in archive view, currently have to toggle live/archive again
  • Fix crash when switching radar sites while loading data from the old site (easily reproducible when starting animation) (#51)
  • Tweak UI to uncrowd the left panel
  • Reduce product cache limit to only include volume times for that product

Maybe (could be deferred to future update):

  • #59
  • Stepped selection when live or archived should apply when changing radar sites
  • Add configurable limit to loop time to prevent memory exhaustion
  • Update animation logic to display intermediate level 2 volume scans

Linux Support

Linux support will come in a future update. Currently certain C++20 chrono features (timezones and formatting) are used, which only MSVC currently supports. GCC 16 is expected to bring additional support, otherwise portions will need rewritten, perhaps using Howard Hinnant's date library and/or fmt. Clang does not currently advertise support of these features.

Asynchronous tasks outlive main thread

template<class F>
void async(F&& f)
{
auto future = std::make_shared<std::future<void>>();
*future = std::async(std::launch::async, [future, f]() { f(); });
}

Because futures are not tracked, if the application exits while an asynchronous operation is still running, undefined behavior can occur within those operations.

A mechanism needs to be created to track these futures and wait for asynchronous tasks to complete.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.