1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-12-01 07:01:16 +01:00
GPXSee/src/data/route.cpp

58 lines
1.2 KiB
C++

#include "dem.h"
#include "route.h"
bool Route::_useDEM = false;
Route::Route(const RouteData &data) : _data(data)
{
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());
_distance.append(dist);
}
}
Path Route::path() const
{
Path ret;
ret.append(PathSegment());
PathSegment &ps = ret.last();
for (int i = 0; i < _data.size(); i++)
ps.append(PathPoint(_data.at(i).coordinates(), _distance.at(i)));
return ret;
}
Graph Route::elevation() const
{
Graph graph;
graph.append(GraphSegment());
GraphSegment &gs = graph.last();
for (int i = 0; i < _data.size(); i++) {
if (_data.at(i).hasElevation() && !_useDEM)
gs.append(GraphPoint(_distance.at(i), NAN,
_data.at(i).elevation()));
else {
qreal elevation = DEM::elevation(_data.at(i).coordinates());
if (!std::isnan(elevation))
gs.append(GraphPoint(_distance.at(i), NAN, elevation));
else if (_data.at(i).hasElevation())
gs.append(GraphPoint(_distance.at(i), NAN,
_data.at(i).elevation()));
}
}
return graph;
}
qreal Route::distance() const
{
return (_distance.isEmpty()) ? 0 : _distance.last();
}