1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-01 21:54:55 -04:00

Map: Add Aurora prediction and Maidenhead grid

This commit is contained in:
srcejon
2025-06-09 10:23:12 +01:00
parent 1aeac6e268
commit 6c9dd36f8b
14 changed files with 1001 additions and 2 deletions
+74 -1
View File
@@ -361,6 +361,7 @@ MapGUI::MapGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *featur
addNAT();
addRadioTimeTransmitters();
addRadar();
addAurora();
addIonosonde();
addBroadcast();
addNavAids();
@@ -813,6 +814,14 @@ void MapGUI::sdrangelServerUpdated(const QList<SDRangelServerList::SDRangelServe
}
}
void MapGUI::addAurora()
{
m_aurora = Aurora::create();
if (m_aurora) {
connect(m_aurora, &Aurora::dataUpdated, this, &MapGUI::auroraUpdated);
}
}
// Ionosonde stations
void MapGUI::addIonosonde()
{
@@ -901,7 +910,7 @@ void MapGUI::updateGIRO(const QDateTime& mapDateTime)
if (m_giroRunId.isEmpty() || (!giroRunId.isEmpty() && (giroRunId != m_giroRunId)))
{
m_giro->getMUF(giroRunId);
m_giro->getMUF(giroRunId);
m_giro->getfoF2(giroRunId);
m_giroRunId = giroRunId;
m_giroDateTime = mapDateTime;
}
@@ -909,6 +918,20 @@ void MapGUI::updateGIRO(const QDateTime& mapDateTime)
}
}
void MapGUI::auroraUpdated(const QImage& image)
{
//QString filename = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation)[0] + "/aurora.png";
//image.save(filename);
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG");
m_webServer->addFile("/map/map/aurora.png", ba);
if (m_cesium) {
m_cesium->setLayerSettings("aurora", {"show"}, {m_settings.m_displayAurora});
}
}
void MapGUI::pathUpdated(const QString& radarPath, const QString& satellitePath)
{
m_radarPath = radarPath;
@@ -1814,7 +1837,9 @@ void MapGUI::displayToolbar()
ui->displayNASAGlobalImagery->setVisible(overlayButtons);
ui->displayMUF->setVisible(!narrow && m_settings.m_map3DEnabled);
ui->displayfoF2->setVisible(!narrow && m_settings.m_map3DEnabled);
ui->displayAurora->setVisible(!narrow && m_settings.m_map3DEnabled);
ui->displayMagDec->setVisible(!narrow && m_settings.m_map3DEnabled);
ui->displayMaidenheadGrid->setVisible(!narrow && m_settings.m_map3DEnabled);
ui->save->setVisible(m_settings.m_map3DEnabled);
}
@@ -1925,11 +1950,13 @@ void MapGUI::applyMap3DSettings(bool reloadMap)
m_cesium->showMUF(m_settings.m_displayMUF);
m_cesium->showfoF2(m_settings.m_displayfoF2);
m_cesium->showMagDec(m_settings.m_displayMagDec);
m_cesium->showMaidenheadGrid(m_settings.m_displayMaidenheadGrid);
m_cesium->showLayer("rain", m_settings.m_displayRain);
m_cesium->showLayer("clouds", m_settings.m_displayClouds);
m_cesium->showLayer("seaMarks", m_settings.m_displaySeaMarks);
m_cesium->showLayer("railways", m_settings.m_displayRailways);
m_cesium->showLayer("nasaGlobalImagery", m_settings.m_displayNASAGlobalImagery);
m_cesium->showLayer("aurora", m_settings.m_displayAurora);
applyNASAGlobalImagerySettings();
m_objectMapModel.allUpdated();
m_imageMapModel.allUpdated();
@@ -1941,9 +1968,15 @@ void MapGUI::applyMap3DSettings(bool reloadMap)
if (ionosondeItemSettings) {
m_giro->getDataPeriodically(ionosondeItemSettings->m_enabled ? 2 : 0);
}
if (m_aurora) {
m_aurora->getDataPeriodically(m_settings.m_displayAurora ? 30 : 0);
}
#else
ui->displayMUF->setVisible(false);
ui->displayfoF2->setVisible(false);
ui->displayAurora->setVisible(false);
ui->displayMagDec->setVisible(false);
ui->displayMaidenheadGrid->setVisible(false);
m_objectMapModel.allUpdated();
m_imageMapModel.allUpdated();
m_polygonMapModel.allUpdated();
@@ -2015,11 +2048,16 @@ void MapGUI::init3DMap()
m_cesium->showMUF(m_settings.m_displayMUF);
m_cesium->showfoF2(m_settings.m_displayfoF2);
m_cesium->showMagDec(m_settings.m_displayMagDec);
m_cesium->showMaidenheadGrid(m_settings.m_displayMaidenheadGrid);
m_cesium->setViewFirstPerson(m_settings.m_viewFirstPerson);
m_cesium->showPFD(m_settings.m_displayPFD);
m_cesium->showLayer("rain", m_settings.m_displayRain);
m_cesium->showLayer("clouds", m_settings.m_displayClouds);
m_cesium->showLayer("seaMarks", m_settings.m_displaySeaMarks);
m_cesium->showLayer("railways", m_settings.m_displayRailways);
m_cesium->showLayer("aurora", m_settings.m_displayAurora);
applyNASAGlobalImagerySettings();
if (!m_radarPath.isEmpty()) {
@@ -2066,7 +2104,9 @@ void MapGUI::displaySettings()
m_displayMUF->setChecked(m_settings.m_displayMUF);
ui->displayfoF2->setChecked(m_settings.m_displayfoF2);
m_displayfoF2->setChecked(m_settings.m_displayfoF2);
ui->displayAurora->setChecked(m_settings.m_displayAurora);
ui->displayMagDec->setChecked(m_settings.m_displayMagDec);
ui->displayMaidenheadGrid->setChecked(m_settings.m_displayMaidenheadGrid);
m_objectMapModel.setDisplayNames(m_settings.m_displayNames);
m_objectMapModel.setDisplaySelectedGroundTracks(m_settings.m_displaySelectedGroundTracks);
m_objectMapModel.setDisplayAllGroundTracks(m_settings.m_displayAllGroundTracks);
@@ -2366,6 +2406,26 @@ void MapGUI::on_displayfoF2_clicked(bool checked)
if (m_cesium && !m_settings.m_displayfoF2) {
m_cesium->showfoF2(m_settings.m_displayfoF2);
}
void MapGUI::on_displayAurora_clicked(bool checked)
{
if (this->sender() != ui->displayAurora) {
ui->displayAurora->setChecked(checked);
}
if (this->sender() != m_displayAurora) {
m_displayAurora->setChecked(checked);
}
m_settings.m_displayAurora = checked;
// Only call show if disabling, so we don't get two updates
// (as getDataPeriodically results in a call to showLayer when the data is available)
if (m_aurora) {
m_aurora->getDataPeriodically(m_settings.m_displayAurora ? 30 : 0);
}
if (m_cesium && !m_settings.m_displayAurora) {
m_cesium->showLayer("aurora", m_settings.m_displayAurora);
}
applySetting("displayAurora");
}
void MapGUI::on_displayMagDec_clicked(bool checked)
{
if (this->sender() != ui->displayMagDec) {
@@ -2438,10 +2498,21 @@ void MapGUI::createLayersMenu()
m_displayfoF2->setToolTip("Display F2 layer critical frequency contours");
connect(m_displayfoF2, &QAction::triggered, this, &MapGUI::on_displayfoF2_clicked);
m_displayAurora = menu->addAction("Aurora");
m_displayAurora->setCheckable(true);
m_displayAurora->setToolTip("Display aurora prediction");
connect(m_displayAurora, &QAction::triggered, this, &MapGUI::on_displayAurora_clicked);
m_displayMagDec = menu->addAction("Mag Dec");
m_displayMagDec->setCheckable(true);
m_displayMagDec->setToolTip("Display magnetic declination");
connect(m_displayMagDec, &QAction::triggered, this, &MapGUI::on_displayMagDec_clicked);
m_displayMaidenheadGrid = menu->addAction("Maidenhead grid");
m_displayMaidenheadGrid->setCheckable(true);
m_displayMaidenheadGrid->setToolTip("Display magnetic declination");
connect(m_displayMaidenheadGrid, &QAction::triggered, this, &MapGUI::on_displayMaidenheadGrid_clicked);
ui->layersMenu->setMenu(menu);
}
@@ -2916,7 +2987,9 @@ void MapGUI::makeUIConnections()
QObject::connect(ui->nasaGlobalImageryOpacity, qOverload<int>(&QDial::valueChanged), this, &MapGUI::on_nasaGlobalImageryOpacity_valueChanged);
QObject::connect(ui->displayMUF, &ButtonSwitch::clicked, this, &MapGUI::on_displayMUF_clicked);
QObject::connect(ui->displayfoF2, &ButtonSwitch::clicked, this, &MapGUI::on_displayfoF2_clicked);
QObject::connect(ui->displayAurora, &ButtonSwitch::clicked, this, &MapGUI::on_displayAurora_clicked);
QObject::connect(ui->displayMagDec, &ButtonSwitch::clicked, this, &MapGUI::on_displayMagDec_clicked);
QObject::connect(ui->displayMaidenheadGrid, &ButtonSwitch::clicked, this, &MapGUI::on_displayMaidenheadGrid_clicked);
QObject::connect(ui->find, &QLineEdit::returnPressed, this, &MapGUI::on_find_returnPressed);
QObject::connect(ui->maidenhead, &QToolButton::clicked, this, &MapGUI::on_maidenhead_clicked);
QObject::connect(ui->save, &QToolButton::clicked, this, &MapGUI::on_save_clicked);