1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-28 05:34:47 +01:00
GPXSee/src/data/route.cpp

88 lines
1.8 KiB
C++
Raw Normal View History

#include "dem.h"
2016-08-09 01:16:19 +02:00
#include "route.h"
bool Route::_useDEM = false;
bool Route::_show2ndElevation = false;
Route::Route(const RouteData &data) : _data(data)
2016-08-09 01:16:19 +02:00
{
qreal dist = 0;
_distance.append(0);
for (int i = 1; i < _data.count(); i++) {
dist += _data.at(i).coordinates().distanceTo(_data.at(i-1).coordinates());
2016-09-19 23:35:04 +02:00
_distance.append(dist);
2016-08-09 01:16:19 +02:00
}
}
Path Route::path() const
{
Path ret;
2019-02-11 23:28:08 +01:00
ret.append(PathSegment());
PathSegment &ps = ret.last();
for (int i = 0; i < _data.size(); i++)
2019-02-11 23:28:08 +01:00
ps.append(PathPoint(_data.at(i).coordinates(), _distance.at(i)));
2022-09-25 02:15:24 +02:00
ret.setStyle(_data.style());
return ret;
}
Graph Route::gpsElevation() const
2016-08-09 01:16:19 +02:00
{
2016-09-19 00:56:10 +02:00
Graph graph;
2019-02-11 23:28:08 +01:00
graph.append(GraphSegment());
GraphSegment &gs = graph.last();
2016-08-09 01:16:19 +02:00
for (int i = 0; i < _data.size(); i++)
if (_data.at(i).hasElevation())
gs.append(GraphPoint(_distance.at(i), NAN, _data.at(i).elevation()));
if (_data.style().color().isValid())
graph.setColor(_data.style().color());
return graph;
}
Graph Route::demElevation() const
{
Graph graph;
graph.append(GraphSegment());
GraphSegment &gs = graph.last();
for (int i = 0; i < _data.size(); i++) {
qreal dem = DEM::elevation(_data.at(i).coordinates());
if (!std::isnan(dem))
gs.append(GraphPoint(_distance.at(i), NAN, dem));
}
if (_data.style().color().isValid())
graph.setColor(_data.style().color());
return graph;
}
GraphPair Route::elevation() const
{
if (_useDEM) {
Graph dem(demElevation());
if (dem.isValid())
return GraphPair(dem, _show2ndElevation ? gpsElevation() : Graph());
else
return GraphPair(gpsElevation(), Graph());
} else {
Graph gps(gpsElevation());
if (gps.isValid())
return GraphPair(gps, _show2ndElevation ? demElevation() : Graph());
else
return GraphPair(demElevation(), Graph());
}
}
qreal Route::distance() const
{
2016-09-19 23:35:04 +02:00
return (_distance.isEmpty()) ? 0 : _distance.last();
2016-08-09 01:16:19 +02:00
}