Add support for advisory speed limits
This adds support for the maxspeed:advisory class of speed tags.
This commit is contained in:
		
							parent
							
								
									6c35272fe2
								
							
						
					
					
						commit
						783d455bd7
					
				
							
								
								
									
										67
									
								
								features/car/advisory.feature
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								features/car/advisory.feature
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | |||||||
|  | @routing @maxspeed @car | ||||||
|  | Feature: Car - Max speed restrictions | ||||||
|  | OSRM will use 4/5 of the projected free-flow speed. | ||||||
|  | 
 | ||||||
|  |     Background: Use specific speeds | ||||||
|  |         Given the profile "car" | ||||||
|  |         Given a grid size of 1000 meters | ||||||
|  | 
 | ||||||
|  |     Scenario: Car - Advisory speed overwrites maxspeed | ||||||
|  |         Given the node map | ||||||
|  |             | a | b | c | | ||||||
|  | 
 | ||||||
|  |         And the ways | ||||||
|  |             | nodes | highway       | maxspeed | maxspeed:advisory | | ||||||
|  |             | ab    | residential   | 90       | 45                | | ||||||
|  |             | bc    | residential   |          | 45                | | ||||||
|  | 
 | ||||||
|  |         When I route I should get | ||||||
|  |             | from | to | route | speed        | | ||||||
|  |             | a    | b  | ab    | 47 km/h +- 1 | | ||||||
|  |             | b    | c  | bc    | 47 km/h +- 1 | | ||||||
|  | 
 | ||||||
|  |     Scenario: Car - Advisory speed overwrites forward maxspeed | ||||||
|  |         Given the node map | ||||||
|  |             | a | b | c | | ||||||
|  | 
 | ||||||
|  |         And the ways | ||||||
|  |             | nodes | highway       | maxspeed:forward | maxspeed:advisory:forward | | ||||||
|  |             | ab    | residential   | 90               | 45                        | | ||||||
|  |             | bc    | residential   |                  | 45                        | | ||||||
|  | 
 | ||||||
|  |         When I route I should get | ||||||
|  |             | from | to | route | speed        | | ||||||
|  |             | a    | b  | ab    | 47 km/h +- 1 | | ||||||
|  |             | b    | c  | bc    | 47 km/h +- 1 | | ||||||
|  | 
 | ||||||
|  |     Scenario: Car - Advisory speed overwrites backwards maxspeed | ||||||
|  |         Given the node map | ||||||
|  |             | a | b | c | | ||||||
|  | 
 | ||||||
|  |         And the ways | ||||||
|  |             | nodes | highway       | maxspeed:backward | maxspeed:advisory:backward | | ||||||
|  |             | ab    | residential   | 90                | 45                         | | ||||||
|  |             | bc    | residential   |                   | 45                         | | ||||||
|  | 
 | ||||||
|  |         When I route I should get | ||||||
|  |             | from | to | route | speed        | | ||||||
|  |             | b    | a  | ab    | 47 km/h +- 1 | | ||||||
|  |             | c    | b  | bc    | 47 km/h +- 1 | | ||||||
|  | 
 | ||||||
|  |     Scenario: Car - Directional advisory speeds play nice with eachother | ||||||
|  |         Given the node map | ||||||
|  |             | a | b | c | | ||||||
|  | 
 | ||||||
|  |         And the ways | ||||||
|  |             | nodes | highway       | maxspeed:advisory | maxspeed:advisory:forward | maxspeed:advisory:backward | | ||||||
|  |             | ab    | residential   | 90                | 45                        | 60                         | | ||||||
|  |             | bc    | residential   | 90                | 60                        | 45                         | | ||||||
|  | 
 | ||||||
|  |         When I route I should get | ||||||
|  |             | from | to | route | speed        | | ||||||
|  |             | a    | b  | ab    | 47 km/h +- 1 | | ||||||
|  |             | b    | a  | ab    | 59 km/h +- 1 | | ||||||
|  |             | b    | c  | bc    | 59 km/h +- 1 | | ||||||
|  |             | c    | b  | bc    | 47 km/h +- 1 | | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @ -379,8 +379,8 @@ function way_function (way, result) | |||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   -- Override speed settings if explicit forward/backward maxspeeds are given |   -- Override speed settings if explicit forward/backward maxspeeds are given | ||||||
|   local maxspeed_forward = parse_maxspeed(way:get_value_by_key( "maxspeed:forward")) |   local maxspeed_forward = parse_maxspeed(way:get_value_by_key("maxspeed:forward")) | ||||||
|   local maxspeed_backward = parse_maxspeed(way:get_value_by_key( "maxspeed:backward")) |   local maxspeed_backward = parse_maxspeed(way:get_value_by_key("maxspeed:backward")) | ||||||
|   if maxspeed_forward and maxspeed_forward > 0 then |   if maxspeed_forward and maxspeed_forward > 0 then | ||||||
|     if 0 ~= result.forward_mode and 0 ~= result.backward_mode then |     if 0 ~= result.forward_mode and 0 ~= result.backward_mode then | ||||||
|       result.backward_speed = result.forward_speed |       result.backward_speed = result.forward_speed | ||||||
| @ -391,6 +391,29 @@ function way_function (way, result) | |||||||
|     result.backward_speed = maxspeed_backward |     result.backward_speed = maxspeed_backward | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   -- Override speed settings if advisory forward/backward maxspeeds are given | ||||||
|  |   local advisory_speed = parse_maxspeed(way:get_value_by_key("maxspeed:advisory")) | ||||||
|  |   local advisory_forward = parse_maxspeed(way:get_value_by_key("maxspeed:advisory:forward")) | ||||||
|  |   local advisory_backward = parse_maxspeed(way:get_value_by_key("maxspeed:advisory:backward")) | ||||||
|  |   -- apply bi-directional advisory speed first | ||||||
|  |   if advisory_speed and advisory_speed > 0 then | ||||||
|  |     if 0 ~= result.forward_mode then | ||||||
|  |       result.forward_speed = advisory_speed | ||||||
|  |     end | ||||||
|  |     if 0 ~= result.backward_mode then | ||||||
|  |       result.backward_speed = advisory_speed | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   if advisory_forward and advisory_forward > 0 then | ||||||
|  |     if 0 ~= result.forward_mode and 0 ~= result.backward_mode then | ||||||
|  |       result.backward_speed = result.forward_speed | ||||||
|  |     end | ||||||
|  |     result.forward_speed = advisory_forward | ||||||
|  |   end | ||||||
|  |   if advisory_backward and advisory_backward > 0 then | ||||||
|  |     result.backward_speed = advisory_backward | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   local width = math.huge |   local width = math.huge | ||||||
|   local lanes = math.huge |   local lanes = math.huge | ||||||
|   if result.forward_speed > 0 or result.backward_speed > 0 then |   if result.forward_speed > 0 or result.backward_speed > 0 then | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user