Returning min and max route altitude and units.

This commit is contained in:
Vladimir Byko-Ianko 2016-09-13 17:47:05 +03:00
parent 93511da6d6
commit 7a3d5a810d
2 changed files with 37 additions and 4 deletions

View file

@ -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;
}

View file

@ -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.