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 | ||||
| 
 | ||||
|   -- Override speed settings if explicit forward/backward maxspeeds are given | ||||
|   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_forward = parse_maxspeed(way:get_value_by_key("maxspeed:forward")) | ||||
|   local maxspeed_backward = parse_maxspeed(way:get_value_by_key("maxspeed:backward")) | ||||
|   if maxspeed_forward and maxspeed_forward > 0 then | ||||
|     if 0 ~= result.forward_mode and 0 ~= result.backward_mode then | ||||
|       result.backward_speed = result.forward_speed | ||||
| @ -391,6 +391,29 @@ function way_function (way, result) | ||||
|     result.backward_speed = maxspeed_backward | ||||
|   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 lanes = math.huge | ||||
|   if result.forward_speed > 0 or result.backward_speed > 0 then | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user