unpacking of target segment works
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user