From f31e14153aba02edf2d57f268b8ad81f27ccd44d Mon Sep 17 00:00:00 2001 From: "romoloman@github.com" <> Date: Sun, 29 Dec 2013 12:12:55 +0100 Subject: [PATCH] KML support for logs --- companion/src/companion9x.qrc | 2 + companion/src/images/track.png | Bin 0 -> 747 bytes companion/src/images/track0.png | Bin 0 -> 2363 bytes companion/src/logsdialog.cpp | 78 ++++++++++++++++++++++++++------ 4 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 companion/src/images/track.png create mode 100644 companion/src/images/track0.png diff --git a/companion/src/companion9x.qrc b/companion/src/companion9x.qrc index 2000e4e15..8a8409172 100644 --- a/companion/src/companion9x.qrc +++ b/companion/src/companion9x.qrc @@ -65,6 +65,8 @@ images/fuses.png images/list.png images/maps.png + images/track.png + images/track0.png images/play.png images/stop.png images/read_eeprom_file.png diff --git a/companion/src/images/track.png b/companion/src/images/track.png new file mode 100644 index 0000000000000000000000000000000000000000..32414b49aa2b544b8f3469e13e36f342d4d8e738 GIT binary patch literal 747 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 literal 0 HcmV?d00001 diff --git a/companion/src/logsdialog.cpp b/companion/src/logsdialog.cpp index 5ad0327dd..12213536b 100644 --- a/companion/src/logsdialog.cpp +++ b/companion/src/logsdialog.cpp @@ -1,11 +1,6 @@ #include "logsdialog.h" #include "ui_logsdialog.h" #include "qcustomplot.h" -#if defined WIN32 || !defined __GNUC__ -#include -#else -#include -#endif logsDialog::logsDialog(QWidget *parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), @@ -178,7 +173,7 @@ void logsDialog::selectionChanged() void logsDialog::on_mapsButton_clicked() { int n = csvlog.count(); // number of points in graph if (n==0) return; - int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0; + int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0, rssicol=0; int itemSelected=0.; bool rangeSelected=false; QSettings settings("companion9x", "companion9x"); @@ -203,6 +198,9 @@ void logsDialog::on_mapsButton_clicked() { if (csvlog.at(0).at(i).contains("Course")) { coursecol=i; } + if (csvlog.at(0).at(i).contains("RSSI")) { + rssicol=i; + } } if (longcol==0 || latcol==0 || altcol==0) { return; @@ -216,9 +214,16 @@ void logsDialog::on_mapsButton_clicked() { if (itemSelected==0) { itemSelected=n-1; } - QString geFilename = QDir::tempPath() + "/flight.kml"; + + QString geFilename = QDir::tempPath() + "/track0.png"; if (QFile::exists(geFilename)) { - unlink(geFilename.toAscii()); + QFile::remove(geFilename); + } + QFile::copy(":/images/track0.png", geFilename); + + geFilename = QDir::tempPath() + "/flight.kml"; + if (QFile::exists(geFilename)) { + QFile::remove(geFilename); } QFile geFile(geFilename); if (!geFile.open(QIODevice::WriteOnly | QIODevice::Text)) { @@ -228,17 +233,62 @@ void logsDialog::on_mapsButton_clicked() { .arg(geFile.errorString())); return; } - + QString latitude,longitude; + double flatitude, flongitude,temp; QTextStream outputStream(&geFile); - outputStream << "\n\n"; - outputStream << "\n\tflight.kml\n\tMy Flight\n\t\t\n"; - outputStream << "\t\t\t1\n\t\t\trelativeToGround\n\t\t\t\n\t\t\t\t"; + outputStream << "\n\n"; + outputStream << "\t\n\t\tMy Flight\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\n\t\t\t\n\t\t\t\tnormal\n\t\t\t\t#multiTrack_n\n\t\t\t\n\t\t\t\n\t\t\t\thighlight\n\t\t\t\t#multiTrack_h\n\t\t\t\n\t\t\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\t\n\t\t\t\tGPS Speed\n\t\t\t\n"; + outputStream << "\t\t\t\n\t\t\t\tRSSI\n\t\t\t\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\n\t\t\tFlight\n\t\t\t\n\t\t\t\tMy Flight\n\t\t\t\t#multiTrack\n\t\t\t\t\n"; for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { - outputStream << csvlog.at(i).at(longcol) << "," << csvlog.at(i).at(latcol) << "," << csvlog.at(i).at(altcol) << " " ; + QString tstamp=csvlog.at(i).at(0)+QString("T")+csvlog.at(i).at(1); + outputStream << "\t\t\t\t\t"<< tstamp <<"\n"; } } - outputStream << "\n\t\t\t\n\t\t\n\t\n\n\n"; + + for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { + latitude=csvlog.at(i).at(latcol).trimmed(); + longitude=csvlog.at(i).at(longcol).trimmed(); + temp=int(latitude.left(latitude.length()-1).toDouble()/100); + flatitude=temp+(latitude.left(latitude.length()-1).toDouble()-temp*100)/60.0; + temp=int(longitude.left(longitude.length()-1).toDouble()/100); + flongitude=temp+(longitude.left(longitude.length()-1).toDouble()-temp*100)/60.0; + if (latitude.right(1)!="N") { + flatitude*=-1; + } + if (longitude.right(1)!="E") { + flongitude*=-1; + } + latitude.sprintf("%3.8f", flatitude); + longitude.sprintf("%3.8f", flongitude); + outputStream << "\t\t\t\t\t" << longitude << " " << latitude << " " << csvlog.at(i).at(altcol) << "\n" ; + } + } + outputStream << "\t\t\t\t\t\n\t\t\t\t\t\t\n"; + outputStream << "\t\t\t\t\t\t\t\n"; + for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { + outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(i).at(speedcol) <<"\n"; + } + } + outputStream << "\t\t\t\t\t\t\t\n"; + outputStream << "\t\t\t\t\t\t\t\n"; + for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { + outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(i).at(rssicol) <<"\n"; + } + } + outputStream << "\t\t\t\t\t\t\t\n"; + outputStream << "\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n"; geFile.close(); QStringList parameters;