diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-09-13 17:47:05 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-09-14 17:37:20 +0300 |
commit | 7a3d5a810dae814d2b8b9dfce9379eb02bb659c7 (patch) | |
tree | a3b72fde35973d0063929290d5482c8c54587068 /map | |
parent | 93511da6d6a059d142978a557719ede7657c1906 (diff) |
Returning min and max route altitude and units.
Diffstat (limited to 'map')
-rw-r--r-- | map/framework.cpp | 31 | ||||
-rw-r--r-- | map/framework.hpp | 10 |
2 files changed, 37 insertions, 4 deletions
diff --git a/map/framework.cpp b/map/framework.cpp index 92f3bccb53..9f5e13fdad 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -2988,7 +2988,9 @@ bool Framework::OriginalFeatureHasDefaultName(FeatureID const & fid) const bool Framework::HasRouteAltitude() const { return m_routingSession.HasRouteAltitude(); } bool Framework::GenerateRouteAltitudeChart(uint32_t width, uint32_t height, - vector<uint8_t> & imageRGBAData) const + vector<uint8_t> & imageRGBAData, + int32_t & minRouteAltitude, int32_t & maxRouteAltitude, + measurement_utils::Units & altitudeUnits) const { feature::TAltitudes altitudes; vector<double> segDistance; @@ -2997,6 +2999,29 @@ bool Framework::GenerateRouteAltitudeChart(uint32_t width, uint32_t height, return false; segDistance.insert(segDistance.begin(), 0.0); - return maps::GenerateChart(width, height, segDistance, altitudes, - GetMapStyle(), imageRGBAData); + if (altitudes.empty()) + return false; + + if (!maps::GenerateChart(width, height, segDistance, altitudes, GetMapStyle(), imageRGBAData)) + return false; + + auto const minMaxIt = minmax_element(altitudes.cbegin(), altitudes.cend()); + feature::TAltitude const minRouteAltitudeM = *minMaxIt.first; + feature::TAltitude const maxRouteAltitudeM = *minMaxIt.second; + + altitudeUnits = measurement_utils::Units::Metric; + UNUSED_VALUE(settings::Get(settings::kMeasurementUnits, altitudeUnits)); + + switch (altitudeUnits) + { + case measurement_utils::Units::Imperial: + minRouteAltitude = measurement_utils::MetersToFeet(minRouteAltitudeM); + maxRouteAltitude = measurement_utils::MetersToFeet(maxRouteAltitudeM); + break; + case measurement_utils::Units::Metric: + minRouteAltitude = minRouteAltitudeM; + maxRouteAltitude = maxRouteAltitudeM; + break; + } + return true; } diff --git a/map/framework.hpp b/map/framework.hpp index 0b96e79f15..64511e7b6c 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -729,13 +729,21 @@ public: /// false otherwise. bool HasRouteAltitude() const; /// \brief Generates 4 bytes per point image (RGBA) and put the data to |imageRGBAData|. + /// \param width is width of chart shall be generated in pixels. + /// \param height is height of chart shall be generated in pixels. + /// \param imageRGBAData is bits of result image in RGBA. + /// \param minRouteAltitude is min altitude along the route in altitudeUnits. + /// \param maxRouteAltitude is max altitude along the route in altitudeUnits. + /// \param altitudeUnits is units (meters or feet) which is used to pass min and max altitudes. /// \returns If there is valid route info and the chart was generated returns true /// and false otherwise. If the method returns true it is guaranteed that the size of /// |imageRGBAData| is not zero. /// \note If HasRouteAltitude() method returns true, GenerateRouteAltitudeChart(...) /// could return false if route was deleted or rebuilt between the calls. bool GenerateRouteAltitudeChart(uint32_t width, uint32_t height, - vector<uint8_t> & imageRGBAData) const; + vector<uint8_t> & imageRGBAData, + int32_t & minRouteAltitude, int32_t & maxRouteAltitude, + measurement_utils::Units & altitudeUnits) const; public: /// @name Editor interface. |