Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-07-19 14:49:38 +0300
committerVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-07-23 10:25:11 +0300
commit3fa7071a1b57145da7559144f2316ad3be555d39 (patch)
treee82db81c207ae5b5bfc93037d735279a301ca5b3 /routing
parentec73bce900be6b5379b49200781d2b1f7c4e4411 (diff)
Implementation index for altitude data with the help of succinct strutures.
Diffstat (limited to 'routing')
-rw-r--r--routing/bicycle_model.cpp2
-rw-r--r--routing/features_road_graph.cpp30
-rw-r--r--routing/features_road_graph.hpp5
-rw-r--r--routing/routing_algorithm.cpp7
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;
}