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;