diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-06-03 19:17:14 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-06-17 19:36:50 +0300 |
commit | afea24bc7f403e40cea7f3f067b6cced9dbfd7f9 (patch) | |
tree | b190be76f6a9a8256dc87c4312efa8b3363d54e9 /routing/bicycle_model.cpp | |
parent | 0b8e94adccd2da6019b6ff5512156e8b1d570123 (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.cpp | 41 |
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); |