Handle motorway forks with links as a normal motorway ...
passing some ramps or mering onto another motorway
This commit is contained in:
parent
49811e1f46
commit
de13834c12
@ -6,6 +6,7 @@
|
|||||||
- CHANGED #4835: MAXIMAL_ALLOWED_SEPARATION_WIDTH increased to 12 meters
|
- 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 #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 #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:
|
- Profile:
|
||||||
- FIXED: `highway=service` will now be used for restricted access, `access=private` is still disabled for snapping.
|
- 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)
|
- 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)
|
||||||
|
@ -342,6 +342,6 @@ Feature: Motorway Guidance
|
|||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,d | abce,cd,cd | depart,turn straight,arrive |
|
| a,d | abce,cd,cd | depart,off ramp slight left,arrive |
|
||||||
| a,e | abce,abce,abce | depart,fork slight left,arrive |
|
| a,e | abce,abce | depart,arrive |
|
||||||
| a,f | abce,cf,cf | depart,fork slight right,arrive |
|
| a,f | abce,cf,cf | depart,turn slight right,arrive |
|
||||||
|
@ -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);
|
node_data_container.GetAnnotation(node_based_graph.GetEdgeData(via_eid).annotation_data);
|
||||||
BOOST_ASSERT(isMotorwayClass(via_eid, node_based_graph));
|
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
|
// find the angle that continues on our current highway
|
||||||
const auto getContinueAngle = [this, in_data](const Intersection &intersection) {
|
const auto getContinueAngle = [this, in_data](const Intersection &intersection) {
|
||||||
for (const auto &road : intersection)
|
for (const auto &road : intersection)
|
||||||
@ -219,7 +209,13 @@ Intersection MotorwayHandler::fromMotorway(const EdgeID via_eid, Intersection in
|
|||||||
}
|
}
|
||||||
else
|
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)
|
if (exiting_motorways == 0)
|
||||||
{
|
{
|
||||||
@ -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
|
// normal motorway passing some ramps or mering onto another motorway
|
||||||
if (intersection.size() == 2)
|
if (intersection.size() == 2)
|
||||||
|
Loading…
Reference in New Issue
Block a user