@@ -167,6 +167,14 @@ void IntersectionHandler::assignFork(const EdgeID via_edge,
167167 node_based_graph.GetEdgeData (left.eid ).road_classification .IsLowPriorityRoadClass ();
168168 const bool low_priority_right =
169169 node_based_graph.GetEdgeData (right.eid ).road_classification .IsLowPriorityRoadClass ();
170+ const auto same_mode_left =
171+ in_data.travel_mode == node_based_graph.GetEdgeData (left.eid ).travel_mode ;
172+ const auto same_mode_right =
173+ in_data.travel_mode == node_based_graph.GetEdgeData (right.eid ).travel_mode ;
174+ const auto suppressed_left_type =
175+ same_mode_left ? TurnType::Suppressed : TurnType::Notification;
176+ const auto suppressed_right_type =
177+ same_mode_right ? TurnType::Suppressed : TurnType::Notification;
170178 if ((angularDeviation (left.angle , STRAIGHT_ANGLE) < MAXIMAL_ALLOWED_NO_TURN_DEVIATION &&
171179 angularDeviation (right.angle , STRAIGHT_ANGLE) > FUZZY_ANGLE_DIFFERENCE))
172180 {
@@ -198,7 +206,7 @@ void IntersectionHandler::assignFork(const EdgeID via_edge,
198206 }
199207 else
200208 {
201- left.instruction = {TurnType::Suppressed , DirectionModifier::Straight};
209+ left.instruction = {suppressed_left_type , DirectionModifier::Straight};
202210 right.instruction = {findBasicTurnType (via_edge, right),
203211 DirectionModifier::SlightRight};
204212 }
@@ -237,15 +245,15 @@ void IntersectionHandler::assignFork(const EdgeID via_edge,
237245 }
238246 else
239247 {
240- right.instruction = {TurnType::Suppressed , DirectionModifier::Straight};
248+ right.instruction = {suppressed_right_type , DirectionModifier::Straight};
241249 left.instruction = {findBasicTurnType (via_edge, left),
242250 DirectionModifier::SlightLeft};
243251 }
244252 }
245253 }
246254 // left side of fork
247255 if (low_priority_right && !low_priority_left)
248- left.instruction = {TurnType::Suppressed , DirectionModifier::SlightLeft};
256+ left.instruction = {suppressed_left_type , DirectionModifier::SlightLeft};
249257 else
250258 {
251259 if (low_priority_left && !low_priority_right)
@@ -256,7 +264,7 @@ void IntersectionHandler::assignFork(const EdgeID via_edge,
256264
257265 // right side of fork
258266 if (low_priority_left && !low_priority_right)
259- right.instruction = {TurnType::Suppressed , DirectionModifier::SlightLeft};
267+ right.instruction = {suppressed_right_type , DirectionModifier::SlightLeft};
260268 else
261269 {
262270 if (low_priority_right && !low_priority_left)
@@ -272,6 +280,12 @@ void IntersectionHandler::assignFork(const EdgeID via_edge,
272280 ConnectedRoad &right) const
273281{
274282 // TODO handle low priority road classes in a reasonable way
283+ const auto suppressed_type = [&](const ConnectedRoad &road) {
284+ const auto in_mode = node_based_graph.GetEdgeData (via_edge).travel_mode ;
285+ const auto out_mode = node_based_graph.GetEdgeData (road.eid ).travel_mode ;
286+ return in_mode == out_mode ? TurnType::Suppressed : TurnType::Notification;
287+ };
288+
275289 if (left.entry_allowed && center.entry_allowed && right.entry_allowed )
276290 {
277291 left.instruction = {TurnType::Fork, DirectionModifier::SlightLeft};
@@ -285,7 +299,7 @@ void IntersectionHandler::assignFork(const EdgeID via_edge,
285299 }
286300 else
287301 {
288- center.instruction = {TurnType::Suppressed , DirectionModifier::Straight};
302+ center.instruction = {suppressed_type (center) , DirectionModifier::Straight};
289303 }
290304 }
291305 else
0 commit comments