diff --git a/lang/gpxsee_cs.ts b/lang/gpxsee_cs.ts
index 458ab026..f5e24333 100644
--- a/lang/gpxsee_cs.ts
+++ b/lang/gpxsee_cs.ts
@@ -24,22 +24,22 @@
m
-
+
Stoupání
-
+
Klesání
-
+
Minimum
-
+
Maximum
@@ -47,123 +47,162 @@
GUI
-
+
O Qt
-
+
Program GPXSee je distribuován pod podmínkami licence GNU General Public License verze 3. Pro více informací navštivte stránky programu na adrese
-
+
Otevřít soubor
-
+
Uložit jako
-
+
Otevřít POI soubor
-
+
Otevřít
-
+
Ukončit
-
+
Uložit
-
+
Zavřít
-
+
Nahrát soubor
-
+
Zobrazit
-
-
+
+
Soubor
-
-
+
+
POI
-
+
Nápověda
-
+
Výška
-
+
Rychlost
-
-
+
+
+ Maximum
+
+
+
+
+ Minimum
+
+
+
+
O aplikaci GPXSee
-
+
Prohlížeč a analyzátor GPX
-
+
+
+ Vzdálenost
+
+
+
+
+ Čas
+
+
+
+
+ Stoupání
+
+
+
+
+
+
+
+ m
+
+
+
+
+ Klesání
+
+
+
Počet tras: %1
-
+
+
km
-
-
+
+
Chyba
-
+
Soubor GPX nelze otevřít:
%1
-
+
Soubor POI nelze otevřít:
@@ -173,12 +212,12 @@
QObject
-
+
Neplatný GPX soubor.
-
+
%1
@@ -202,32 +241,32 @@ Rádka %1
SpeedGraph
-
+
Vzdálenost
-
+
Rychlost
-
+
-
+
km/h
-
+
Průměr
-
+
Maximum
diff --git a/src/elevationgraph.h b/src/elevationgraph.h
index d0908f87..66fbce78 100644
--- a/src/elevationgraph.h
+++ b/src/elevationgraph.h
@@ -14,6 +14,11 @@ public:
void loadGPX(const GPX &gpx);
void clear();
+ qreal ascent() const {return _ascent;}
+ qreal descent() const {return _descent;}
+ qreal max() const {return _max;}
+ qreal min() const {return _min;}
+
private:
qreal _ascent, _descent;
qreal _max, _min;
diff --git a/src/gpx.cpp b/src/gpx.cpp
index 44ed1826..e12f7104 100644
--- a/src/gpx.cpp
+++ b/src/gpx.cpp
@@ -11,68 +11,6 @@
#define WINDOW_SF 11
-bool GPX::loadFile(const QString &fileName)
-{
- QFile file(fileName);
- bool ret;
-
- _data.clear();
- _error.clear();
-
- if (!file.open(QFile::ReadOnly | QFile::Text)) {
- _error = qPrintable(file.errorString());
- return false;
- }
-
- if (!(ret = _parser.loadFile(&file, _data)))
- _error = _parser.errorString();
- file.close();
-
- return ret;
-}
-
-static QVector filter(const QVector &v, int window)
-{
- qreal acc = 0;
- QVector ret;
-
- if (v.size() < window)
- return QVector(v);
-
- for (int i = 0; i < window; i++)
- acc += v.at(i).y();
- for (int i = 0; i <= window/2; i++)
- ret.append(QPointF(v.at(i).x(), acc/window));
-
- for (int i = window/2 + 1; i < v.size() - window/2; i++) {
- acc += v.at(i + window/2).y() - v.at(i - (window/2 + 1)).y();
- ret.append(QPointF(v.at(i).x(), acc/window));
- }
-
- for (int i = v.size() - window/2; i < v.size(); i++)
- ret.append(QPointF(v.at(i).x(), acc/window));
-
- return ret;
-}
-
-
-void GPX::elevationGraph(QVector &graph) const
-{
- qreal dist = 0;
- QVector raw;
-
- if (!_data.size())
- return;
-
- raw.append(QPointF(0, _data.at(0).elevation));
- for (int i = 1; i < _data.size(); i++) {
- dist += llDistance(_data.at(i).coordinates, _data.at(i-1).coordinates);
- raw.append(QPointF(dist, _data.at(i).elevation));
- }
-
- graph = filter(raw, WINDOW_EF);
-}
-
static bool lt(const QPointF &p1, const QPointF &p2)
{
return p1.y() < p2.y();
@@ -120,6 +58,69 @@ static QVector eliminate(const QVector &v, int window)
return ret;
}
+static QVector filter(const QVector &v, int window)
+{
+ qreal acc = 0;
+ QVector ret;
+
+ if (v.size() < window)
+ return QVector(v);
+
+ for (int i = 0; i < window; i++)
+ acc += v.at(i).y();
+ for (int i = 0; i <= window/2; i++)
+ ret.append(QPointF(v.at(i).x(), acc/window));
+
+ for (int i = window/2 + 1; i < v.size() - window/2; i++) {
+ acc += v.at(i + window/2).y() - v.at(i - (window/2 + 1)).y();
+ ret.append(QPointF(v.at(i).x(), acc/window));
+ }
+
+ for (int i = v.size() - window/2; i < v.size(); i++)
+ ret.append(QPointF(v.at(i).x(), acc/window));
+
+ return ret;
+}
+
+
+bool GPX::loadFile(const QString &fileName)
+{
+ QFile file(fileName);
+ bool ret;
+
+ _data.clear();
+ _error.clear();
+
+ if (!file.open(QFile::ReadOnly | QFile::Text)) {
+ _error = qPrintable(file.errorString());
+ return false;
+ }
+
+ if (!(ret = _parser.loadFile(&file, _data)))
+ _error = _parser.errorString();
+ file.close();
+
+ return ret;
+}
+
+void GPX::elevationGraph(QVector &graph) const
+{
+ qreal dist = 0;
+ QVector raw;
+
+ if (!_data.size())
+ return;
+
+ raw.append(QPointF(0, _data.at(0).elevation));
+ for (int i = 1; i < _data.size(); i++) {
+ dist += llDistance(_data.at(i).coordinates, _data.at(i-1).coordinates);
+ raw.append(QPointF(dist, _data.at(i).elevation
+ - _data.at(i).geoidheight));
+ }
+
+ graph = filter(raw, WINDOW_EF);
+}
+
void GPX::speedGraph(QVector &graph) const
{
qreal dist = 0, v, ds, dt;
diff --git a/src/graph.cpp b/src/graph.cpp
index 8ad5d737..520eae54 100644
--- a/src/graph.cpp
+++ b/src/graph.cpp
@@ -216,9 +216,11 @@ void Graph::plot(QPainter *painter, const QRectF &target)
QSizeF canvas = QSizeF(orig.height() * ratio, orig.height());
resize(canvas);
- _slider->setVisible(false);
+ _slider->hide();
+ _info->hide();
_scene->render(painter, target, QRectF(), Qt::KeepAspectRatioByExpanding);
- _slider->setVisible(true);
+ _slider->show();
+ _info->show();
resize(orig);
}
diff --git a/src/gui.cpp b/src/gui.cpp
index 41b3bba5..7cacd55f 100644
--- a/src/gui.cpp
+++ b/src/gui.cpp
@@ -8,7 +8,6 @@
#include
#include
#include
-#include "gui.h"
#include "config.h"
#include "icons.h"
#include "keys.h"
@@ -16,10 +15,13 @@
#include "elevationgraph.h"
#include "speedgraph.h"
#include "track.h"
+#include "infoitem.h"
+#include "gui.h"
#include
+
static QString timeSpan(qreal time)
{
unsigned h, m, s;
@@ -287,12 +289,28 @@ void GUI::saveFile(const QString &fileName)
printer.setOutputFileName(fileName);
QPainter p(&printer);
- int margin = (printer.paperRect().height() - printer.pageRect().height())
- / 2;
- _track->plot(&p, QRectF(0, 0, printer.width(), (0.80 * printer.height())
- - margin));
+
+ _track->plot(&p, QRectF(0, 300, printer.width(), (0.80 * printer.height())
+ - 400));
_elevationGraph->plot(&p, QRectF(0, 0.80 * printer.height(),
printer.width(), printer.height() * 0.20));
+
+ QGraphicsScene scene;
+ InfoItem info;
+ info.insert(tr("Distance"), QString::number(_distance / 1000, 'f', 1) + " "
+ + tr("km"));
+ info.insert(tr("Time"), timeSpan(_time));
+ info.insert(tr("Ascent"), QString::number(_elevationGraph->ascent(), 'f', 0)
+ + " " + tr("m"));
+ info.insert(tr("Descent"), QString::number(_elevationGraph->descent(), 'f',
+ 0) + " " + tr("m"));
+ info.insert(tr("Maximum"), QString::number(_elevationGraph->max(), 'f', 0)
+ + " " + tr("m"));
+ info.insert(tr("Minimum"), QString::number(_elevationGraph->min(), 'f', 0)
+ + " " + tr("m"));
+ scene.addItem(&info);
+ scene.render(&p, QRectF(0, 0, printer.width(), 200));
+
p.end();
}
diff --git a/src/parser.cpp b/src/parser.cpp
index 6fc1be6d..a9bb4c4f 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -18,6 +18,8 @@ void Parser::handleTrekPointData(QVector &data,
if (element == "time")
data.last().timestamp = QDateTime::fromString(value.toLatin1(),
Qt::ISODate);
+ if (element == "geoidheight")
+ data.last().geoidheight = value.toLatin1().toDouble();
}
void Parser::handleTrekPointAttributes(QVector &data,
@@ -41,7 +43,8 @@ void Parser::extensions(QVector &data)
void Parser::trekPointData(QVector &data)
{
while (_reader.readNextStartElement()) {
- if (_reader.name() == "ele" || _reader.name() == "time")
+ if (_reader.name() == "ele" || _reader.name() == "time"
+ || _reader.name() == "geoidheight")
handleTrekPointData(data, _reader.name(), _reader.readElementText());
else if (_reader.name() == "extensions")
extensions(data);
diff --git a/src/parser.h b/src/parser.h
index 0f02b779..e1ac47eb 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -10,9 +10,10 @@ struct TrackPoint
QPointF coordinates;
QDateTime timestamp;
qreal elevation;
+ qreal geoidheight;
qreal speed;
- TrackPoint() {speed = -1;}
+ TrackPoint() {elevation = 0; geoidheight = 0; speed = -1;}
};
class Parser
diff --git a/src/speedgraph.cpp b/src/speedgraph.cpp
index 33e9b9e0..102ff5e7 100644
--- a/src/speedgraph.cpp
+++ b/src/speedgraph.cpp
@@ -18,30 +18,21 @@ SpeedGraph::SpeedGraph(QWidget *parent) : Graph(parent)
void SpeedGraph::loadGPX(const GPX &gpx)
{
QVector data;
- qreal max = 0, sum = 0, w = 0, avg;
+ qreal max = 0;
gpx.speedGraph(data);
if (data.isEmpty())
return;
- avg = gpx.distance() / gpx.time();
- _avg.append(QPointF(gpx.distance(), avg));
+ _avg.append(QPointF(gpx.distance(), gpx.distance() / gpx.time()));
for (int i = 0; i < data.size(); i++)
max = qMax(max, data.at(i).y());
-
-
- sum = 0; w = 0;
- for (QList::iterator it = _avg.begin(); it != _avg.end(); it++) {
- sum += it->y() * it->x();
- w += it->x();
- }
- avg = sum / w;
_max = qMax(_max, max);
- addInfo(tr("Average"), QString::number(avg * _yScale, 'f', 1) + " "
+ addInfo(tr("Average"), QString::number(avg() * _yScale, 'f', 1) + " "
+ _yUnits);
addInfo(tr("Maximum"), QString::number(_max * _yScale, 'f', 1) + " "
+ _yUnits);
@@ -49,6 +40,19 @@ void SpeedGraph::loadGPX(const GPX &gpx)
Graph::loadData(data);
}
+qreal SpeedGraph::avg() const
+{
+ qreal sum = 0, w = 0;
+ QList::const_iterator it;
+
+ for (it = _avg.begin(); it != _avg.end(); it++) {
+ sum += it->y() * it->x();
+ w += it->x();
+ }
+
+ return (sum / w);
+}
+
void SpeedGraph::clear()
{
_max = 0;
diff --git a/src/speedgraph.h b/src/speedgraph.h
index 406e4104..c9dc6e8c 100644
--- a/src/speedgraph.h
+++ b/src/speedgraph.h
@@ -15,6 +15,9 @@ public:
void loadGPX(const GPX &gpx);
void clear();
+ qreal avg() const;
+ qreal max() const {return _max;}
+
private:
qreal _max;
QList _avg;