diff --git a/Docs/WebFrontend/Route.js b/Docs/WebFrontend/Route.js index 804af32c7..c04f8fcbb 100644 --- a/Docs/WebFrontend/Route.js +++ b/Docs/WebFrontend/Route.js @@ -139,7 +139,7 @@ function showResultsRoute(response) { routelink += '\');" value="Get Link">'; //Link for the GPX Download - var gpxLink = '( name } node.uid = OSM_UID osm_db << node diff --git a/features/step_definitions/routing.rb b/features/step_definitions/routing.rb index 0f9db6523..29a0dfcf4 100644 --- a/features/step_definitions/routing.rb +++ b/features/step_definitions/routing.rb @@ -157,8 +157,6 @@ Then /^routability should be$/ do |table| table.hashes.each_with_index do |row,i| got = row.dup attempts = [] - row['way'] = "w#{i}" - got['way'] = "w#{i}" ['forw','backw'].each do |direction| if table.headers.include? direction if direction == 'forw' @@ -168,10 +166,13 @@ Then /^routability should be$/ do |table| end got[direction] = route_status response json = JSON.parse(response.body) - if got[direction] == 'x' + if got[direction].empty? == false route = way_list json['route_instructions'] if route != "w#{i}" - got[direction] = "#{route}?" + got[direction] = "testing w#{i}, but got #{route}!?" + elsif row[direction] =~ /\d+s/ + time = json['route_summary']['total_time'] + got[direction] = "#{time}s" end end if got[direction] != row[direction] @@ -203,7 +204,7 @@ When /^I route I should get$/ do |table| instructions = way_list json['route_instructions'] end end - + got = {'from' => row['from'], 'to' => row['to'] } if table.headers.include? 'start' got['start'] = instructions ? json['route_summary']['start_point'] : nil @@ -213,15 +214,20 @@ When /^I route I should get$/ do |table| end if table.headers.include? 'route' got['route'] = (instructions || '').strip - end - if table.headers.include? 'distance' - got['distance'] = instructions ? json['route_summary']['total_distance'].to_s : nil + if table.headers.include? 'distance' + got['distance'] = instructions ? json['route_summary']['total_distance'].to_s : nil + end + if table.headers.include? 'time' + raise "*** time must be specied in seconds. (ex: 60s)" unless row['time'] =~ /\d+s/ + got['time'] = instructions ? "#{json['route_summary']['total_time'].to_s}s" : nil + end end if row != got failed = { :attempt => 'route', :query => @query, :response => response } log_fail row,got,[failed] end + actual << got end end diff --git a/features/support/data.rb b/features/support/data.rb index 63fcec13e..e8d5a555d 100644 --- a/features/support/data.rb +++ b/features/support/data.rb @@ -12,10 +12,13 @@ LOG_FILE = 'fail.log' OSM_TIMESTAMP = '2000-00-00T00:00:00Z' DEFAULT_SPEEDPROFILE = 'bicycle' WAY_SPACING = 10 +DEFAULT_GRID_SIZE = 100 #meters ORIGIN = [1,1] -NODE_SPACING = 100 #meters -ZOOM = 0.001*(NODE_SPACING.to_f/111.0) + +def set_grid_size meters + @zoom = 0.001*(meters.to_f/111.21) +end def build_ways_from_table table #add one unconnected way for each row @@ -28,10 +31,10 @@ def build_ways_from_table table #instead we place all lines as a string on the same y coordinate. this prevents using neightboring ways. #a few nodes... - node1 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(0+WAY_SPACING*ri)*ZOOM, ORIGIN[1] - node2 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(1+WAY_SPACING*ri)*ZOOM, ORIGIN[1] - node3 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(2+WAY_SPACING*ri)*ZOOM, ORIGIN[1] - node4 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(3+WAY_SPACING*ri)*ZOOM, ORIGIN[1] + node1 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(0+WAY_SPACING*ri)*@zoom, ORIGIN[1] + node2 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(1+WAY_SPACING*ri)*@zoom, ORIGIN[1] + node3 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(2+WAY_SPACING*ri)*@zoom, ORIGIN[1] + node4 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(3+WAY_SPACING*ri)*@zoom, ORIGIN[1] node1.uid = OSM_UID node2.uid = OSM_UID node3.uid = OSM_UID diff --git a/features/support/hooks.rb b/features/support/hooks.rb index 70bbc2df9..30579c52b 100644 --- a/features/support/hooks.rb +++ b/features/support/hooks.rb @@ -4,6 +4,7 @@ Before do |scenario| reset_data @has_logged_preprocess_info = false @has_logged_scenario_info = false + set_grid_size DEFAULT_GRID_SIZE end Around('@routing') do |scenario, block| diff --git a/features/time.feature b/features/time.feature new file mode 100644 index 000000000..24f0a448b --- /dev/null +++ b/features/time.feature @@ -0,0 +1,182 @@ +@routing @time +Feature: Estimation of travel time + Note: + 15km/h = 15000m/3600s = 150m/36s = 100m/24s + 5km/h = 5000m/3600s = 50m/36s = 100m/72s + + Background: Use specific speeds + Given the speedprofile "bicycle" + And the speedprofile settings + | primary | 15 | + | footway | 5 | + + Scenario: Basic travel time, 1m scale + Given a grid size of 1 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 0s | + | x | b | xb | 0s | + | x | c | xc | 0s | + | x | d | xd | 0s | + | x | e | xe | 0s | + | x | f | xf | 0s | + | x | g | xg | 0s | + | x | h | xh | 0s | + + Scenario: Basic travel time, 100m scale + Given a grid size of 100 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 24s | + | x | b | xb | 34s | + | x | c | xc | 24s | + | x | d | xd | 34s | + | x | e | xe | 24s | + | x | f | xf | 34s | + | x | g | xg | 24s | + | x | h | xh | 34s | + + Scenario: Basic travel time, 10km scale + Given a grid size of 10000 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 2400s | + | x | b | xb | 3400s | + | x | c | xc | 2400s | + | x | d | xd | 3400s | + | x | e | xe | 2400s | + | x | f | xf | 3400s | + | x | g | xg | 2400s | + | x | h | xh | 3400s | + + Scenario: Time of travel depending on way type + Given the nodes + | a | b | + | c | d | + + And the ways + | nodes | highway | + | ab | primary | + | cd | footway | + + When I route I should get + | from | to | route | time | + | a | b | ab | 24s | + | c | d | cd | 72s | + + Scenario: Time of travel on a series of ways + Given the nodes + | a | b | c | d | + + And the ways + | nodes | highway | + | ab | primary | + | bc | primary | + | cd | primary | + + When I route I should get + | from | to | route | time | + | a | b | ab | 24s | + | a | c | ab,bc | 48s | + | a | d | ab,bc,cd | 72s | + + Scenario: Time of travel on a winding way + Given the nodes + | a | b | | | | | + | | c | d | e | | i | + | | | | f | g | h | + + And the ways + | nodes | highway | + | abcdefghi | primary | + + When I route I should get + | from | to | route | time | + | a | b | abcdefghi | 24s | + | a | e | abcdefghi | 96s | + | a | i | abcdefghi | 192s | + + Scenario: Time of travel on combination of road types + Given the nodes + | a | b | c | d | e | + + And the ways + | nodes | highway | + | abc | primary | + | cde | footway | + + When I route I should get + | from | to | route | time | + | b | c | abc | 24s | + | c | e | cde | 72s | + | b | d | abc,cde | 144s | + | a | e | abc,cde | 192s | + + Scenario: Time of travel on part of a way + Given the nodes + | a | 1 | + | | 2 | + | | 3 | + | b | 4 | + + And the ways + | nodes | highway | + | ab | primary | + + When I route I should get + | from | to | route | time | + | 1 | 2 | ab | 24s | + | 1 | 3 | ab | 48s | + | 1 | 4 | ab | 72s | + | 4 | 3 | ab | 24s | + | 4 | 2 | ab | 48s | + | 4 | 1 | ab | 72s | +