unpacking of target segment works

This commit is contained in:
Dennis Luxen
2014-02-28 17:14:38 +01:00
parent 874c579f86
commit eca09e6c81
9 changed files with 80 additions and 58 deletions
+10 -21
View File
@@ -18,14 +18,13 @@ struct EdgeBasedNode {
u(SPECIAL_NODEID),
v(SPECIAL_NODEID),
name_id(0),
forward_weight(std::numeric_limits<int>::max() >> 1),
reverse_weight(std::numeric_limits<int>::max() >> 1),
forward_weight(INVALID_EDGE_WEIGHT >> 1),
reverse_weight(INVALID_EDGE_WEIGHT >> 1),
forward_offset(0),
reverse_offset(0),
packed_geometry_id(SPECIAL_EDGEID),
fwd_segment_position( std::numeric_limits<unsigned short>::max() ),
rev_segment_position( std::numeric_limits<unsigned short>::max() >> 2 ),
belongsToTinyComponent(false),
is_compressed(false)
belongsToTinyComponent(false)
{ }
explicit EdgeBasedNode(
@@ -38,10 +37,9 @@ struct EdgeBasedNode {
int reverse_weight,
int forward_offset,
int reverse_offset,
unsigned packed_geometry_id,
unsigned short fwd_segment_position,
unsigned short rev_segment_position,
bool belongsToTinyComponent,
bool is_compressed
bool belongs_to_tiny_component
) :
forward_edge_based_node_id(forward_edge_based_node_id),
reverse_edge_based_node_id(reverse_edge_based_node_id),
@@ -52,23 +50,14 @@ struct EdgeBasedNode {
reverse_weight(reverse_weight),
forward_offset(forward_offset),
reverse_offset(reverse_offset),
packed_geometry_id(packed_geometry_id),
fwd_segment_position(fwd_segment_position),
rev_segment_position(rev_segment_position),
belongsToTinyComponent(belongsToTinyComponent),
is_compressed(is_compressed)
belongsToTinyComponent(belongs_to_tiny_component)
{
BOOST_ASSERT(
( forward_edge_based_node_id != SPECIAL_NODEID ) ||
( reverse_edge_based_node_id != SPECIAL_NODEID )
);
// if( forward_edge_based_node_id == SPECIAL_NODEID ) {
// using namespace std;
// swap( forward_edge_based_node_id, reverse_edge_based_node_id );
// swap( u, v );
// swap( forward_weight, reverse_weight );
// swap( forward_offset, reverse_offset );
// swap( fwd_segment_position, rev_segment_position );
// }
}
inline static double ComputePerpendicularDistance(
@@ -149,7 +138,7 @@ struct EdgeBasedNode {
}
bool IsCompressed() {
return is_compressed;
return packed_geometry_id != SPECIAL_EDGEID;
}
// Returns the midpoint of the underlying edge.
@@ -158,7 +147,7 @@ struct EdgeBasedNode {
}
NodeID forward_edge_based_node_id;
NodeID reverse_edge_based_node_id;
NodeID reverse_edge_based_node_id; // needed for edge-expanded graph
NodeID u;
NodeID v;
unsigned name_id;
+3 -3
View File
@@ -40,9 +40,9 @@ struct PhantomNode {
reverse_weight(INVALID_EDGE_WEIGHT),
forward_offset(0),
reverse_offset(0),
packed_geometry_id(SPECIAL_EDGEID),
ratio(0.),
fwd_segment_position(0),
rev_segment_position(0)
fwd_segment_position(0)
{ }
NodeID forward_node_id;
@@ -52,10 +52,10 @@ struct PhantomNode {
int reverse_weight;
int forward_offset;
int reverse_offset;
unsigned packed_geometry_id;
double ratio;
FixedPointCoordinate location;
unsigned short fwd_segment_position;
unsigned short rev_segment_position;
int GetForwardWeightPlusOffset() const {
+5 -2
View File
@@ -690,15 +690,17 @@ public:
)
) { //found a new minimum
min_dist = current_perpendicular_distance;
//TODO: use assignment c'tor in PhantomNode
result_phantom_node.forward_node_id = current_edge.forward_edge_based_node_id;
result_phantom_node.reverse_node_id = current_edge.reverse_edge_based_node_id;
result_phantom_node.name_id = current_edge.name_id;
result_phantom_node.forward_weight = current_edge.forward_weight;
result_phantom_node.reverse_weight = current_edge.reverse_weight;
result_phantom_node.forward_offset = current_edge.forward_offset;
result_phantom_node.reverse_offset = current_edge.reverse_offset;
result_phantom_node.packed_geometry_id = current_edge.packed_geometry_id;
result_phantom_node.fwd_segment_position = current_edge.fwd_segment_position;
result_phantom_node.rev_segment_position = current_edge.rev_segment_position;
result_phantom_node.name_id = current_edge.name_id;
result_phantom_node.location = nearest;
current_start_coordinate.lat = m_coordinate_list->at(current_edge.u).lat;
current_start_coordinate.lon = m_coordinate_list->at(current_edge.u).lon;
@@ -767,6 +769,7 @@ public:
SimpleLogger().Write(logDEBUG) << "fwd weight: " << result_phantom_node.forward_weight << ", rev weight: " << result_phantom_node.reverse_weight << ", ratio: " << result_phantom_node.ratio;
SimpleLogger().Write(logDEBUG) << "bidirected: " << (result_phantom_node.isBidirected() ? "y" : "n");
SimpleLogger().Write(logDEBUG) << "name id: " << result_phantom_node.name_id;
SimpleLogger().Write(logDEBUG) << "geom id: " << result_phantom_node.packed_geometry_id;
return found_a_nearest_edge;
}