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-06-03 19:17:14 +0300
committerVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-06-17 19:36:50 +0300
commitafea24bc7f403e40cea7f3f067b6cced9dbfd7f9 (patch)
treeb190be76f6a9a8256dc87c4312efa8b3363d54e9 /routing/bicycle_model.cpp
parent0b8e94adccd2da6019b6ff5512156e8b1d570123 (diff)
[bicycle routing] Using attr bicycle=yes or no and oneway:bicycle for bicycle routing.
Diffstat (limited to 'routing/bicycle_model.cpp')
-rw-r--r--routing/bicycle_model.cpp41
1 files changed, 35 insertions, 6 deletions
diff --git a/routing/bicycle_model.cpp b/routing/bicycle_model.cpp
index 77cae657e1..962939377c 100644
--- a/routing/bicycle_model.cpp
+++ b/routing/bicycle_model.cpp
@@ -601,13 +601,15 @@ BicycleModel::BicycleModel(VehicleModel::InitListT const & speedLimits)
void BicycleModel::Init()
{
- // @TODO(bykoianko) Uncomment line below what tags hwtag=nobicycle and hwtag=yesbicycle
- // will be added to classificator.txt. (https://jira.mail.ru/browse/MAPSME-858)
-// m_noBicycleType = classif().GetTypeByPath({ "hwtag", "nobicycle" });
-// m_yesBicycleType = classif().GetTypeByPath({ "hwtag", "yesbicycle" });
+ initializer_list<char const *> hwtagYesbicycle = { "hwtag", "yesbicycle" };
+
+ m_yesBicycleType = classif().GetTypeByPath(hwtagYesbicycle);
+ m_noBicycleType = classif().GetTypeByPath({ "hwtag", "nobicycle" });
+ m_bicycleBidirType = classif().GetTypeByPath({ "hwtag", "bicycle_bidir" });
initializer_list<char const *> arr[] =
{
+ hwtagYesbicycle,
{ "route", "ferry" },
{ "man_made", "pier" },
};
@@ -625,18 +627,45 @@ bool BicycleModel::IsYesBicycle(feature::TypesHolder const & types) const
return find(types.begin(), types.end(), m_yesBicycleType) != types.end();
}
+bool BicycleModel::IsBicycleBidir(feature::TypesHolder const & types) const
+{
+ return find(types.begin(), types.end(), m_bicycleBidirType) != types.end();
+}
+
double BicycleModel::GetSpeed(FeatureType const & f) const
{
feature::TypesHolder types(f);
if (IsYesBicycle(types))
return VehicleModel::GetMaxSpeed();
- if (!IsNoBicycle(types) && IsRoad(types))
- return VehicleModel::GetSpeed(types);
+ if (!IsNoBicycle(types) && HasRoadType(types))
+ return VehicleModel::GetMinTypeSpeed(types);
return 0.0;
}
+bool BicycleModel::IsOneWay(FeatureType const & f) const
+{
+ feature::TypesHolder const types(f);
+
+ if (IsBicycleBidir(types))
+ return false;
+
+ return VehicleModel::IsOneWay(f);
+}
+
+bool BicycleModel::IsRoad(FeatureType const & f) const
+{
+ if (f.GetFeatureType() != feature::GEOM_LINE)
+ return false;
+
+ feature::TypesHolder types(f);
+
+ if (IsNoBicycle(types))
+ return false;
+ return VehicleModel::HasRoadType(types);
+}
+
BicycleModelFactory::BicycleModelFactory()
{
m_models[string()] = make_shared<BicycleModel>(g_bicycleLimitsDefault);