diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-06-21 11:46:32 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-07-23 10:25:09 +0300 |
commit | de84454400b0c35f8556957e4945cd7f68b6c8e6 (patch) | |
tree | f88a7acfac7344e79719ebb2091820dd697833a8 /routing | |
parent | eead0e66ec4f397ecb67aedc8bf252c370efff31 (diff) |
[altitude] The first version of writing to mwm and reading from altitude information.
Diffstat (limited to 'routing')
-rw-r--r-- | routing/bicycle_model.cpp | 7 | ||||
-rw-r--r-- | routing/bicycle_model.hpp | 3 | ||||
-rw-r--r-- | routing/features_road_graph.cpp | 5 | ||||
-rw-r--r-- | routing/pedestrian_model.cpp | 7 | ||||
-rw-r--r-- | routing/pedestrian_model.hpp | 2 | ||||
-rw-r--r-- | routing/road_graph.hpp | 2 | ||||
-rw-r--r-- | routing/routing.pro | 2 | ||||
-rw-r--r-- | routing/routing_helpers.hpp | 17 |
8 files changed, 44 insertions, 1 deletions
diff --git a/routing/bicycle_model.cpp b/routing/bicycle_model.cpp index 458bdced2b..5d629bf18a 100644 --- a/routing/bicycle_model.cpp +++ b/routing/bicycle_model.cpp @@ -638,6 +638,13 @@ bool BicycleModel::IsOneWay(FeatureType const & f) const return VehicleModel::IsOneWay(f); } +// static +BicycleModel const & BicycleModel::DefaultInstance() +{ + static BicycleModel const instance; + return instance; +} + BicycleModelFactory::BicycleModelFactory() { m_models[string()] = make_shared<BicycleModel>(g_bicycleLimitsDefault); diff --git a/routing/bicycle_model.hpp b/routing/bicycle_model.hpp index 85820d4344..3765abb9f3 100644 --- a/routing/bicycle_model.hpp +++ b/routing/bicycle_model.hpp @@ -17,6 +17,8 @@ public: /// VehicleModel overrides: bool IsOneWay(FeatureType const & f) const override; + static BicycleModel const & DefaultInstance(); + protected: RoadAvailability GetRoadAvailability(feature::TypesHolder const & types) const override; @@ -45,5 +47,4 @@ public: private: unordered_map<string, shared_ptr<IVehicleModel>> m_models; }; - } // namespace routing diff --git a/routing/features_road_graph.cpp b/routing/features_road_graph.cpp index 602d0a2d37..8d0d1dcd22 100644 --- a/routing/features_road_graph.cpp +++ b/routing/features_road_graph.cpp @@ -277,6 +277,11 @@ IRoadGraph::RoadInfo const & FeaturesRoadGraph::GetCachedRoadInfo(FeatureID cons ri.m_speedKMPH = GetSpeedKMPHFromFt(ft); ft.SwapPoints(ri.m_points); + ft.ParseAltitude(); + // @TODO It's better to use swap here when altitudes is kept in a vector. + ri.m_altitudes = ft.GetAltitudes(); + LOG(LINFO, ("ri.m_altitudes.begin =", ri.m_altitudes.begin, "ri.m_altitudes.end =", ri.m_altitudes.end)); + LockFeatureMwm(featureId); return ri; diff --git a/routing/pedestrian_model.cpp b/routing/pedestrian_model.cpp index 678a4064d9..7947e0b999 100644 --- a/routing/pedestrian_model.cpp +++ b/routing/pedestrian_model.cpp @@ -642,6 +642,13 @@ IVehicleModel::RoadAvailability PedestrianModel::GetRoadAvailability(feature::Ty return RoadAvailability::Unknown; } +// static +PedestrianModel const & PedestrianModel::DefaultInstance() +{ + static PedestrianModel const instance; + return instance; +} + PedestrianModelFactory::PedestrianModelFactory() { m_models[string()] = make_shared<PedestrianModel>(g_pedestrianLimitsDefault); diff --git a/routing/pedestrian_model.hpp b/routing/pedestrian_model.hpp index c00df62db8..db0b392451 100644 --- a/routing/pedestrian_model.hpp +++ b/routing/pedestrian_model.hpp @@ -17,6 +17,8 @@ public: /// VehicleModel overrides: bool IsOneWay(FeatureType const &) const override { return false; } + static PedestrianModel const & DefaultInstance(); + protected: RoadAvailability GetRoadAvailability(feature::TypesHolder const & types) const override; diff --git a/routing/road_graph.hpp b/routing/road_graph.hpp index b995a3e2d8..528f471131 100644 --- a/routing/road_graph.hpp +++ b/routing/road_graph.hpp @@ -4,6 +4,7 @@ #include "base/string_utils.hpp" +#include "indexer/feature_altitude.hpp" #include "indexer/feature_data.hpp" #include "std/initializer_list.hpp" @@ -106,6 +107,7 @@ public: RoadInfo & operator=(RoadInfo const &) = default; buffer_vector<m2::PointD, 32> m_points; + feature::Altitudes m_altitudes; double m_speedKMPH; bool m_bidirectional; }; diff --git a/routing/routing.pro b/routing/routing.pro index 0c9579602b..6d676f711c 100644 --- a/routing/routing.pro +++ b/routing/routing.pro @@ -49,6 +49,7 @@ SOURCES += \ turns_tts_text.cpp \ vehicle_model.cpp \ + HEADERS += \ async_router.hpp \ base/astar_algorithm.hpp \ @@ -79,6 +80,7 @@ HEADERS += \ router.hpp \ router_delegate.hpp \ routing_algorithm.hpp \ + routing_helpers.hpp \ routing_mapping.hpp \ routing_result_graph.hpp \ routing_session.hpp \ diff --git a/routing/routing_helpers.hpp b/routing/routing_helpers.hpp new file mode 100644 index 0000000000..45f8fa7b3c --- /dev/null +++ b/routing/routing_helpers.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "routing/bicycle_model.hpp" +#include "routing/car_model.hpp" +#include "routing/pedestrian_model.hpp" + +namespace routing +{ +/// \returns true if a feature with |types| can be used for any kind of routing. +template <class TList> +bool IsRoad(TList const & types) +{ + return CarModel::Instance().HasRoadType(types) + || PedestrianModel::DefaultInstance().HasRoadType(types) + || BicycleModel::DefaultInstance().HasRoadType(types); +} +} // namespace rouing |