Skip to content
Snippets Groups Projects
Commit 4fb7f0fe authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Solved a bug when computing the in and out road radius when creating junction links.

parent 7d601ef2
No related branches found
No related tags found
1 merge request!2Solved a bug when creating a new geometry object: the sale factor is...
...@@ -608,37 +608,55 @@ void COSMJunction::create_links(void) ...@@ -608,37 +608,55 @@ void COSMJunction::create_links(void)
node3=&out_way.get_segment_end_node(FIRST_SEGMENT); node3=&out_way.get_segment_end_node(FIRST_SEGMENT);
else else
node3=&out_way.get_segment_start_node(LAST_SEGMENT); node3=&out_way.get_segment_start_node(LAST_SEGMENT);
in_radius=DEFAULT_MIN_RADIUS+(in_way.get_num_lanes()/2.0)*in_way.get_lane_width();
if(in_way.is_node_first(this->parent_node->get_id()))
{
node1=&in_way.get_segment_end_node(FIRST_SEGMENT);
left=in_way.is_node_left(*node3,false,0.2);
right=in_way.is_node_right(*node3,false,0.2);
}
else
{
node1=&in_way.get_segment_start_node(LAST_SEGMENT);
left=in_way.is_node_left(*node3,true,0.2);
right=in_way.is_node_right(*node3,true,0.2);
}
/*
if(in_way.is_node_first(this->parent_node->get_id())) if(in_way.is_node_first(this->parent_node->get_id()))
{ {
node1=&in_way.get_segment_end_node(FIRST_SEGMENT); node1=&in_way.get_segment_end_node(FIRST_SEGMENT);
if((left=in_way.is_node_left(*node3,false,0.2))==true) if((left=in_way.is_node_left(*node3,false,0.2))==true)
in_radius=DEFAULT_MIN_RADIUS+((k+1)/2.0)*in_way.get_lane_width(); in_radius=DEFAULT_MIN_RADIUS+(in_way.get_num_lanes()/2.0-k)*in_way.get_lane_width();
else if((right=in_way.is_node_right(*node3,false,0.2))==true) else if((right=in_way.is_node_right(*node3,false,0.2))==true)
in_radius=DEFAULT_MIN_RADIUS+(((double)(in_way.get_num_lanes()-1)-k)/2.0)*in_way.get_lane_width(); in_radius=DEFAULT_MIN_RADIUS+(k+1-in_way.get_num_lanes()/2.0)*in_way.get_lane_width();
} }
else else
{ {
node1=&in_way.get_segment_start_node(LAST_SEGMENT); node1=&in_way.get_segment_start_node(LAST_SEGMENT);
if((left=in_way.is_node_left(*node3,true,0.2))==true) if((left=in_way.is_node_left(*node3,true,0.2))==true)
in_radius=DEFAULT_MIN_RADIUS+(((double)(in_way.get_num_lanes()-1)-k)/2.0)*in_way.get_lane_width(); in_radius=DEFAULT_MIN_RADIUS+(in_way.get_num_lanes()/2.0)*in_way.get_lane_width();
else if((right=in_way.is_node_right(*node3,true,0.2))==true) else if((right=in_way.is_node_right(*node3,true,0.2))==true)
in_radius=DEFAULT_MIN_RADIUS+((k+1)/2.0)*in_way.get_lane_width(); in_radius=DEFAULT_MIN_RADIUS+(in_way.get_num_lanes()/2.0-k)*in_way.get_lane_width();
} }
*/
out_radius=DEFAULT_MIN_RADIUS+(out_way.get_num_lanes()/2.0)*out_way.get_lane_width();
/*
if(out_way.is_node_first(this->parent_node->get_id())) if(out_way.is_node_first(this->parent_node->get_id()))
{ {
if(left) if(left)
out_radius=DEFAULT_MIN_RADIUS+(((double)(out_way.get_num_lanes()-1)-l)/2.0)*out_way.get_lane_width(); out_radius=DEFAULT_MIN_RADIUS+(l+1-in_way.get_num_lanes()/2.0)*in_way.get_lane_width();
else if(right) else if(right)
out_radius=DEFAULT_MIN_RADIUS+((l+1)/2.0)*out_way.get_lane_width(); out_radius=DEFAULT_MIN_RADIUS+(in_way.get_num_lanes()/2.0-l)*in_way.get_lane_width();
} }
else else
{ {
if(left) if(left)
out_radius=DEFAULT_MIN_RADIUS+((l+1)/2.0)*out_way.get_lane_width(); out_radius=DEFAULT_MIN_RADIUS+(in_way.get_num_lanes()/2.0-l)*in_way.get_lane_width();
else if(right) else if(right)
out_radius=DEFAULT_MIN_RADIUS+(((double)(out_way.get_num_lanes()-1)-l)/2.0)*out_way.get_lane_width(); out_radius=DEFAULT_MIN_RADIUS+(l+1-in_way.get_num_lanes()/2.0)*in_way.get_lane_width();
} }
// std::cout << "in way: " << in_way.id << " lane " << k << " out way: " << out_way.id << " lane " << l << " in radius " << in_radius << " out radius " << out_radius << std::endl; */
// std::cout << "in way: " << in_way.id << " lane " << k << " out way: " << out_way.id << " lane " << l << " in radius " << in_radius << " out radius " << out_radius << " num lanes in: " << in_way.get_num_lanes() << " num fwd lanes in: " << in_way.get_num_forward_lanes() << " num lanes out: " << out_way.get_num_lanes() << " num fwd lanes out: " << out_way.get_num_forward_lanes() << std::endl;
angle=this->parent_node->compute_angle(*node1,*node3); angle=this->parent_node->compute_angle(*node1,*node3);
if(!left && !right) if(!left && !right)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment