1 #include "dem.h" 2 #include "route.h" 3 4 bool Route::_useDEM = false; 5 bool Route::_show2ndElevation = false; 6 Route(const RouteData & data)7Route::Route(const RouteData &data) : _data(data) 8 { 9 qreal dist = 0; 10 11 _distance.append(0); 12 13 for (int i = 1; i < _data.count(); i++) { 14 dist += _data.at(i).coordinates().distanceTo(_data.at(i-1).coordinates()); 15 _distance.append(dist); 16 } 17 } 18 path() const19Path Route::path() const 20 { 21 Path ret; 22 ret.append(PathSegment()); 23 PathSegment &ps = ret.last(); 24 25 for (int i = 0; i < _data.size(); i++) 26 ps.append(PathPoint(_data.at(i).coordinates(), _distance.at(i))); 27 28 return ret; 29 } 30 gpsElevation() const31Graph Route::gpsElevation() const 32 { 33 Graph graph; 34 graph.append(GraphSegment()); 35 GraphSegment &gs = graph.last(); 36 37 for (int i = 0; i < _data.size(); i++) 38 if (_data.at(i).hasElevation()) 39 gs.append(GraphPoint(_distance.at(i), NAN, _data.at(i).elevation())); 40 41 return graph; 42 } 43 demElevation() const44Graph Route::demElevation() const 45 { 46 Graph graph; 47 graph.append(GraphSegment()); 48 GraphSegment &gs = graph.last(); 49 50 for (int i = 0; i < _data.size(); i++) { 51 qreal dem = DEM::elevation(_data.at(i).coordinates()); 52 if (!std::isnan(dem)) 53 gs.append(GraphPoint(_distance.at(i), NAN, dem)); 54 } 55 56 return graph; 57 } 58 elevation() const59GraphPair Route::elevation() const 60 { 61 if (_useDEM) { 62 Graph dem(demElevation()); 63 if (dem.isValid()) 64 return GraphPair(dem, _show2ndElevation ? gpsElevation() : Graph()); 65 else 66 return GraphPair(gpsElevation(), Graph()); 67 } else { 68 Graph gps(gpsElevation()); 69 if (gps.isValid()) 70 return GraphPair(gps, _show2ndElevation ? demElevation() : Graph()); 71 else 72 return GraphPair(demElevation(), Graph()); 73 } 74 } 75 distance() const76qreal Route::distance() const 77 { 78 return (_distance.isEmpty()) ? 0 : _distance.last(); 79 } 80