diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-07-19 14:49:38 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-07-23 10:25:11 +0300 |
commit | 3fa7071a1b57145da7559144f2316ad3be555d39 (patch) | |
tree | e82db81c207ae5b5bfc93037d735279a301ca5b3 /routing | |
parent | ec73bce900be6b5379b49200781d2b1f7c4e4411 (diff) |
Implementation index for altitude data with the help of succinct strutures.
Diffstat (limited to 'routing')
-rw-r--r-- | routing/bicycle_model.cpp | 2 | ||||
-rw-r--r-- | routing/features_road_graph.cpp | 30 | ||||
-rw-r--r-- | routing/features_road_graph.hpp | 5 | ||||
-rw-r--r-- | routing/routing_algorithm.cpp | 7 |
4 files changed, 23 insertions, 21 deletions
diff --git a/routing/bicycle_model.cpp b/routing/bicycle_model.cpp index 5d629bf18a..ac8a867d43 100644 --- a/routing/bicycle_model.cpp +++ b/routing/bicycle_model.cpp @@ -686,7 +686,7 @@ shared_ptr<IVehicleModel> BicycleModelFactory::GetVehicleModelForCountry(string LOG(LDEBUG, ("Bicycle model was found:", country)); return itr->second; } - LOG(LDEBUG, ("Bicycle model wasn't found, default model is used instead:", country)); + LOG(LDEBUG, ("Bicycle model wasn't found, default bicycle model is used instead:", country)); return BicycleModelFactory::GetVehicleModel(); } } // routing diff --git a/routing/features_road_graph.cpp b/routing/features_road_graph.cpp index 7458a9142d..0c4ed59023 100644 --- a/routing/features_road_graph.cpp +++ b/routing/features_road_graph.cpp @@ -263,30 +263,23 @@ void FeaturesRoadGraph::ExtractRoadInfo(FeatureID const & featureId, FeatureType ri.m_speedKMPH = speedKMPH; ft.ParseGeometry(FeatureType::BEST_GEOMETRY); - feature::Altitudes altitudes = value.altitudeLoader.GetAltitudes(featureId.m_index); - LOG(LINFO, ("Feature idx =", featureId.m_index, "altitudes.begin =", altitudes.begin, - "altitudes.end =", altitudes.end)); - - // @TODO It's a temprarery solution until a vector of feature altitudes is saved in mwm. - bool const isAltidudeValid = altitudes.begin != feature::kInvalidAltitude && - altitudes.end != feature::kInvalidAltitude; - feature::TAltitude pointAlt = altitudes.begin; + feature::TAltitudes altitudes = value.altitudeLoader.GetAltitude(featureId.m_index, ft.GetPointsCount()); + size_t const pointsCount = ft.GetPointsCount(); - feature::TAltitude const diffAlt = - isAltidudeValid ? (altitudes.end - altitudes.begin) / pointsCount : 0; + if (altitudes.size() != pointsCount) + { + ASSERT(false, ("altitudes.size is different from ft.GetPointsCount()")); + altitudes.clear(); + } ri.m_junctions.clear(); ri.m_junctions.resize(pointsCount); for (size_t i = 0; i < pointsCount; ++i) { - if (!isAltidudeValid) - { + if (altitudes.empty()) ri.m_junctions[i] = Junction(ft.GetPoint(i), feature::kInvalidAltitude); - continue; - } - - ri.m_junctions[i] = Junction(ft.GetPoint(i), pointAlt); - pointAlt += diffAlt; + else + ri.m_junctions[i] = Junction(ft.GetPoint(i), altitudes[i]); } } @@ -343,8 +336,7 @@ FeaturesRoadGraph::Value const & FeaturesRoadGraph::LockFeatureMwm(FeatureID con if (mwmHandle.IsAlive()) mwmValue = mwmHandle.GetValue<MwmValue>(); - Value value = {move(mwmHandle), feature::AltitudeLoader(mwmValue)}; - + Value value(move(mwmHandle), mwmValue); return m_mwmLocks.insert(make_pair(move(mwmId), move(value))).first->second; } } // namespace routing diff --git a/routing/features_road_graph.hpp b/routing/features_road_graph.hpp index 1503023f40..3c82ca2f1e 100644 --- a/routing/features_road_graph.hpp +++ b/routing/features_road_graph.hpp @@ -81,6 +81,11 @@ private: struct Value { + Value(MwmSet::MwmHandle && handle, MwmValue const * MwmValue) + : mwmHandle(move(handle)), altitudeLoader(MwmValue) + { + } + MwmSet::MwmHandle mwmHandle; feature::AltitudeLoader altitudeLoader; }; diff --git a/routing/routing_algorithm.cpp b/routing/routing_algorithm.cpp index 6f2fb26410..3495ef8b02 100644 --- a/routing/routing_algorithm.cpp +++ b/routing/routing_algorithm.cpp @@ -20,7 +20,12 @@ inline double TimeBetweenSec(Junction const & j1, Junction const & j2, double sp { ASSERT(speedMPS > 0.0, ()); double const distanceM = MercatorBounds::DistanceOnEarth(j1.GetPoint(), j2.GetPoint()); - double const altidudeDiffM = j2.GetAltitude() - j1.GetAltitude(); + feature::TAltitude const j1Altitude = j1.GetAltitude(); + feature::TAltitude const j2Altitude = j2.GetAltitude(); + if (j1Altitude == feature::kInvalidAltitude || j2Altitude == feature::kInvalidAltitude) + return distanceM / speedMPS; + + feature::TAltitude const altidudeDiffM = j2Altitude - j1Altitude; return sqrt(distanceM * distanceM + altidudeDiffM * altidudeDiffM) / speedMPS; } |