correctly unpacking the first segment

This commit is contained in:
Dennis Luxen
2014-02-27 19:49:53 +01:00
parent a0bddab169
commit 874c579f86
7 changed files with 156 additions and 268 deletions
+1 -1
View File
@@ -174,5 +174,5 @@ void FixedPointCoordinate::convertInternalReversedCoordinateToString(
}
void FixedPointCoordinate::Output(std::ostream & out) const {//, FixedPointCoordinate & c) {
out << "(" << lat << "," << lon << ")";
out << "(" << lat/COORDINATE_PRECISION << "," << lon/COORDINATE_PRECISION << ")";
}
+25 -10
View File
@@ -23,11 +23,12 @@ struct EdgeBasedNode {
forward_offset(0),
reverse_offset(0),
fwd_segment_position( std::numeric_limits<unsigned short>::max() ),
rev_segment_position( std::numeric_limits<unsigned short>::max() >> 1 ),
belongsToTinyComponent(false)
rev_segment_position( std::numeric_limits<unsigned short>::max() >> 2 ),
belongsToTinyComponent(false),
is_compressed(false)
{ }
EdgeBasedNode(
explicit EdgeBasedNode(
NodeID forward_edge_based_node_id,
NodeID reverse_edge_based_node_id,
NodeID u,
@@ -39,7 +40,8 @@ struct EdgeBasedNode {
int reverse_offset,
unsigned short fwd_segment_position,
unsigned short rev_segment_position,
bool belongsToTinyComponent
bool belongsToTinyComponent,
bool is_compressed
) :
forward_edge_based_node_id(forward_edge_based_node_id),
reverse_edge_based_node_id(reverse_edge_based_node_id),
@@ -52,10 +54,23 @@ struct EdgeBasedNode {
reverse_offset(reverse_offset),
fwd_segment_position(fwd_segment_position),
rev_segment_position(rev_segment_position),
belongsToTinyComponent(belongsToTinyComponent)
{ }
// Computes:
// - the distance from the given query location to nearest point on this edge (and returns it)
belongsToTinyComponent(belongsToTinyComponent),
is_compressed(is_compressed)
{
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(
const FixedPointCoordinate & coord_a,
const FixedPointCoordinate & coord_b,
@@ -134,7 +149,7 @@ struct EdgeBasedNode {
}
bool IsCompressed() {
return (fwd_segment_position + rev_segment_position) != 0;
return is_compressed;
}
// Returns the midpoint of the underlying edge.
@@ -152,7 +167,7 @@ struct EdgeBasedNode {
int forward_offset;
int reverse_offset;
unsigned short fwd_segment_position;
unsigned short rev_segment_position:15;
unsigned short rev_segment_position:14; //TODO: not actually needed!
bool belongsToTinyComponent:1;
NodeID name_id;
+5 -5
View File
@@ -683,11 +683,11 @@ public:
BOOST_ASSERT( 0. <= current_perpendicular_distance );
if(
( current_perpendicular_distance < min_dist ) //&&
// !DoubleEpsilonCompare(
// current_perpendicular_distance,
// min_dist
// )
( current_perpendicular_distance < min_dist ) &&
!DoubleEpsilonCompare(
current_perpendicular_distance,
min_dist
)
) { //found a new minimum
min_dist = current_perpendicular_distance;
result_phantom_node.forward_node_id = current_edge.forward_edge_based_node_id;