Fix problem with uturns=true
This commit is contained in:
parent
a964bec0f8
commit
1fd66f55c1
@ -84,6 +84,12 @@ class ShortestPathRouting final
|
|||||||
BOOST_ASSERT(forward_heap.Size() > 0);
|
BOOST_ASSERT(forward_heap.Size() > 0);
|
||||||
BOOST_ASSERT(reverse_heap.Size() > 0);
|
BOOST_ASSERT(reverse_heap.Size() > 0);
|
||||||
|
|
||||||
|
// this is only relevent if source and target are on the same compressed edge
|
||||||
|
auto is_oneway_source = !(search_from_forward_node && search_from_reverse_node);
|
||||||
|
auto is_oneway_target = !(search_to_forward_node && search_to_reverse_node);
|
||||||
|
// we only enable loops here if we can't search from forward to backward node
|
||||||
|
auto needs_loop_forwad = is_oneway_source && super::NeedsLoopForward(source_phantom, target_phantom);
|
||||||
|
auto needs_loop_backwards = is_oneway_target && super::NeedsLoopBackwards(source_phantom, target_phantom);
|
||||||
if (super::facade->GetCoreSize() > 0)
|
if (super::facade->GetCoreSize() > 0)
|
||||||
{
|
{
|
||||||
forward_core_heap.Clear();
|
forward_core_heap.Clear();
|
||||||
@ -91,15 +97,12 @@ class ShortestPathRouting final
|
|||||||
BOOST_ASSERT(forward_core_heap.Size() == 0);
|
BOOST_ASSERT(forward_core_heap.Size() == 0);
|
||||||
BOOST_ASSERT(reverse_core_heap.Size() == 0);
|
BOOST_ASSERT(reverse_core_heap.Size() == 0);
|
||||||
super::SearchWithCore(forward_heap, reverse_heap, forward_core_heap, reverse_core_heap,
|
super::SearchWithCore(forward_heap, reverse_heap, forward_core_heap, reverse_core_heap,
|
||||||
new_total_distance, leg_packed_path,
|
new_total_distance, leg_packed_path, needs_loop_forwad, needs_loop_backwards);
|
||||||
super::NeedsLoopForward(source_phantom, target_phantom),
|
|
||||||
super::NeedsLoopBackwards(source_phantom, target_phantom));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
super::Search(forward_heap, reverse_heap, new_total_distance, leg_packed_path,
|
super::Search(forward_heap, reverse_heap, new_total_distance, leg_packed_path,
|
||||||
super::NeedsLoopForward(source_phantom, target_phantom),
|
needs_loop_forwad, needs_loop_backwards);
|
||||||
super::NeedsLoopBackwards(source_phantom, target_phantom));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,17 +157,18 @@ class ShortestPathRouting final
|
|||||||
reverse_core_heap.Clear();
|
reverse_core_heap.Clear();
|
||||||
BOOST_ASSERT(forward_core_heap.Size() == 0);
|
BOOST_ASSERT(forward_core_heap.Size() == 0);
|
||||||
BOOST_ASSERT(reverse_core_heap.Size() == 0);
|
BOOST_ASSERT(reverse_core_heap.Size() == 0);
|
||||||
super::SearchWithCore(
|
super::SearchWithCore(forward_heap, reverse_heap, forward_core_heap,
|
||||||
forward_heap, reverse_heap, forward_core_heap, reverse_core_heap,
|
reverse_core_heap, new_total_distance_to_forward,
|
||||||
new_total_distance_to_forward, leg_packed_path_forward,
|
leg_packed_path_forward,
|
||||||
super::NeedsLoopForward(source_phantom, target_phantom), DO_NOT_FORCE_LOOP);
|
super::NeedsLoopForward(source_phantom, target_phantom),
|
||||||
|
super::NeedsLoopBackwards(source_phantom, target_phantom));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
super::Search(forward_heap, reverse_heap, new_total_distance_to_forward,
|
super::Search(forward_heap, reverse_heap, new_total_distance_to_forward,
|
||||||
leg_packed_path_forward,
|
leg_packed_path_forward,
|
||||||
super::NeedsLoopForward(source_phantom, target_phantom),
|
super::NeedsLoopForward(source_phantom, target_phantom),
|
||||||
DO_NOT_FORCE_LOOP);
|
super::NeedsLoopBackwards(source_phantom, target_phantom));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user