3/4 unpack cases working

This commit is contained in:
Dennis Luxen 2014-02-26 18:44:34 +01:00
parent b679a94930
commit a0bddab169
2 changed files with 17 additions and 9 deletions

View File

@ -294,7 +294,7 @@ public:
super::UnpackPath( super::UnpackPath(
packed_shortest_path, packed_shortest_path,
phantom_node_pair.startPhantom.fwd_segment_position, phantom_node_pair.startPhantom.fwd_segment_position,
(packed_shortest_path.front() == phantom_node_pair.startPhantom.reverse_node_id), (packed_shortest_path.front() == phantom_node_pair.startPhantom.forward_node_id),
phantom_node_pair.targetPhantom.fwd_segment_position,//( packed_forward_path.back() == phantom_node_pair.targetPhantom.forward_node_id ? 1 : -1 )*phantom_node_pair.targetPhantom.fwd_segment_position, phantom_node_pair.targetPhantom.fwd_segment_position,//( packed_forward_path.back() == phantom_node_pair.targetPhantom.forward_node_id ? 1 : -1 )*phantom_node_pair.targetPhantom.fwd_segment_position,
raw_route_data.unpacked_path_segments.front() raw_route_data.unpacked_path_segments.front()
); );

View File

@ -149,12 +149,6 @@ public:
// std::cout << packed_path[i] << " "; // std::cout << packed_path[i] << " ";
// } // }
bool segment_reversed = false;
SimpleLogger().Write(logDEBUG) << "fwd offset: " << fwd_index_offset;
SimpleLogger().Write(logDEBUG) << "rev offset: " << rev_index_offset;
SimpleLogger().Write(logDEBUG) << "start_traversed_in_reverse: " << ( start_traversed_in_reverse ? "y" : "n" );
// SimpleLogger().Write() << "starting unpack"; // SimpleLogger().Write() << "starting unpack";
const unsigned packed_path_size = packed_path.size(); const unsigned packed_path_size = packed_path.size();
std::stack<std::pair<NodeID, NodeID> > recursion_stack; std::stack<std::pair<NodeID, NodeID> > recursion_stack;
@ -168,6 +162,7 @@ public:
std::pair<NodeID, NodeID> edge; std::pair<NodeID, NodeID> edge;
while(!recursion_stack.empty()) { while(!recursion_stack.empty()) {
bool segment_reversed = false;
edge = recursion_stack.top(); edge = recursion_stack.top();
recursion_stack.pop(); recursion_stack.pop();
@ -216,6 +211,13 @@ public:
// // SimpleLogger().Write(logDEBUG) << "first geometry: " << id_vector.front() << ", last geometry: " << id_vector.back(); // // SimpleLogger().Write(logDEBUG) << "first geometry: " << id_vector.front() << ", last geometry: " << id_vector.back();
const bool edge_is_reversed = (!ed.forward && ed.backward); const bool edge_is_reversed = (!ed.forward && ed.backward);
SimpleLogger().Write(logDEBUG) << "fwd offset: " << fwd_index_offset;
SimpleLogger().Write(logDEBUG) << "rev offset: " << rev_index_offset;
SimpleLogger().Write(logDEBUG) << "start_traversed_in_reverse: " << ( start_traversed_in_reverse ? "y" : "n" );
SimpleLogger().Write(logDEBUG) << "edge_is_reversed: " << ( edge_is_reversed ? "y" : "n" );
// if( edge_is_reversed ) { // if( edge_is_reversed ) {
// SimpleLogger().Write(logDEBUG) << "reversing geometry"; // SimpleLogger().Write(logDEBUG) << "reversing geometry";
@ -230,8 +232,14 @@ public:
BOOST_FOREACH(unsigned number, id_vector) { BOOST_FOREACH(unsigned number, id_vector) {
SimpleLogger().Write() << "[" << number << "] " << facade->GetCoordinateOfNode(number); SimpleLogger().Write() << "[" << number << "] " << facade->GetCoordinateOfNode(number);
} }
const int start_index = ( ( start_traversed_in_reverse ) ? fwd_index_offset : 0 ); int start_index = ( ( start_traversed_in_reverse ) ? 0 : id_vector.size() - fwd_index_offset );
const int end_index = ( ( start_traversed_in_reverse ) ? id_vector.size() : fwd_index_offset ); int end_index = ( ( start_traversed_in_reverse ) ? id_vector.size() + 1 - fwd_index_offset : id_vector.size() );
if( edge_is_reversed ) {
start_index = ( ( !start_traversed_in_reverse ) ? id_vector.size() - fwd_index_offset - 1: fwd_index_offset );
end_index = ( ( !start_traversed_in_reverse ) ? id_vector.size() : id_vector.size() + 1 - fwd_index_offset );
}
// BOOST_ASSERT( start_index >= 0 ); // BOOST_ASSERT( start_index >= 0 );
// // BOOST_ASSERT( start_index <= end_index ); // // BOOST_ASSERT( start_index <= end_index );