Skip to content

Commit

Permalink
Handle motorway forks with links as a normal motorway ...
Browse files Browse the repository at this point in the history
passing some ramps or mering onto another motorway
  • Loading branch information
oxidase committed Feb 21, 2018
1 parent 49811e1 commit de13834
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 16 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- CHANGED #4835: MAXIMAL_ALLOWED_SEPARATION_WIDTH increased to 12 meters
- CHANGED #4842: Lower priority links from a motorway now are used as motorway links [#4842](https://github.com/Project-OSRM/osrm-backend/pull/4842)
- CHANGED #4895: Use ramp bifurcations as fork intersections [#4895](https://github.com/Project-OSRM/osrm-backend/issues/4895)
- CHANGED #4893: Handle motorway forks with links as normal motorway intersections[#4893](https://github.com/Project-OSRM/osrm-backend/issues/4893)
- Profile:
- FIXED: `highway=service` will now be used for restricted access, `access=private` is still disabled for snapping.
- ADDED #4775: Exposes more information to the turn function, now being able to set turn weights with highway and access information of the turn as well as other roads at the intersection [#4775](https://github.com/Project-OSRM/osrm-backend/issues/4775)
Expand Down
8 changes: 4 additions & 4 deletions features/guidance/motorway.feature
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ Feature: Motorway Guidance
| cd | motorway_link |

When I route I should get
| waypoints | route | turns |
| a,d | abce,cd,cd | depart,turn straight,arrive |
| a,e | abce,abce,abce | depart,fork slight left,arrive |
| a,f | abce,cf,cf | depart,fork slight right,arrive |
| waypoints | route | turns |
| a,d | abce,cd,cd | depart,off ramp slight left,arrive |
| a,e | abce,abce | depart,arrive |
| a,f | abce,cf,cf | depart,turn slight right,arrive |
20 changes: 8 additions & 12 deletions src/guidance/motorway_handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,16 +118,6 @@ Intersection MotorwayHandler::fromMotorway(const EdgeID via_eid, Intersection in
node_data_container.GetAnnotation(node_based_graph.GetEdgeData(via_eid).annotation_data);
BOOST_ASSERT(isMotorwayClass(via_eid, node_based_graph));

const auto countExitingMotorways = [this](const Intersection &intersection) {
unsigned count = 0;
for (const auto &road : intersection)
{
if (road.entry_allowed && isMotorwayClass(road.eid, node_based_graph))
++count;
}
return count;
};

// find the angle that continues on our current highway
const auto getContinueAngle = [this, in_data](const Intersection &intersection) {
for (const auto &road : intersection)
Expand Down Expand Up @@ -219,7 +209,13 @@ Intersection MotorwayHandler::fromMotorway(const EdgeID via_eid, Intersection in
}
else
{
const unsigned exiting_motorways = countExitingMotorways(intersection);
const auto valid_exits = std::count_if(intersection.begin(),
intersection.end(),
[](const auto &road) { return road.entry_allowed; });
const auto exiting_motorways =
std::count_if(intersection.begin(), intersection.end(), [this](const auto &road) {
return road.entry_allowed && isMotorwayClass(road.eid, node_based_graph);
});

if (exiting_motorways == 0)
{
Expand All @@ -233,7 +229,7 @@ Intersection MotorwayHandler::fromMotorway(const EdgeID via_eid, Intersection in
}
}
}
else if (exiting_motorways == 1)
else if (exiting_motorways == 1 || exiting_motorways != valid_exits)
{
// normal motorway passing some ramps or mering onto another motorway
if (intersection.size() == 2)
Expand Down

0 comments on commit de13834

Please sign in to comment.