-- Testbot profile -- Moves at fixed, well-known speeds, practical for testing speed and travel times: -- Primary road: 36km/h = 36000m/3600s = 100m/10s -- Secondary road: 18km/h = 18000m/3600s = 100m/20s -- Tertiary road: 12km/h = 12000m/3600s = 100m/30s api_version = 4 function setup() return { properties = { continue_straight_at_waypoint = true, max_speed_for_map_matching = 30/3.6, --km -> m/s weight_name = 'duration', process_call_tagless_node = false, u_turn_penalty = 20, traffic_light_penalty = 7, -- seconds use_turn_restrictions = true }, classes = {"motorway", "toll", "TooWords2"}, excludable = { {["motorway"] = true}, {["toll"] = true}, {["motorway"] = true, ["toll"] = true} }, default_speed = 24, speeds = { primary = 36, secondary = 18, tertiary = 12, steps = 6 } } end function process_node (profile, node, result) local traffic_signal = node:get_value_by_key("highway") if traffic_signal and traffic_signal == "traffic_signals" then result.traffic_lights = true -- TODO: a way to set the penalty value end end function process_way (profile, way, result) local highway = way:get_value_by_key("highway") local toll = way:get_value_by_key("toll") local name = way:get_value_by_key("name") local oneway = way:get_value_by_key("oneway") local route = way:get_value_by_key("route") local duration = way:get_value_by_key("duration") local maxspeed = tonumber(way:get_value_by_key ( "maxspeed")) local maxspeed_forward = tonumber(way:get_value_by_key( "maxspeed:forward")) local maxspeed_backward = tonumber(way:get_value_by_key( "maxspeed:backward")) local junction = way:get_value_by_key("junction") if name then result.name = name end result.forward_mode = mode.driving result.backward_mode = mode.driving if duration and durationIsValid(duration) then result.duration = math.max( 1, parseDuration(duration) ) result.forward_mode = mode.route result.backward_mode = mode.route else local speed_forw = profile.speeds[highway] or profile.default_speed local speed_back = speed_forw if highway == "river" then local temp_speed = speed_forw result.forward_mode = mode.river_down result.backward_mode = mode.river_up speed_forw = temp_speed*1.5 speed_back = temp_speed/1.5 elseif highway == "steps" then result.forward_mode = mode.steps_down result.backward_mode = mode.steps_up end if maxspeed_forward ~= nil and maxspeed_forward > 0 then speed_forw = maxspeed_forward else if maxspeed ~= nil and maxspeed > 0 and speed_forw > maxspeed then speed_forw = maxspeed end end if maxspeed_backward ~= nil and maxspeed_backward > 0 then speed_back = maxspeed_backward else if maxspeed ~=nil and maxspeed > 0 and speed_back > maxspeed then speed_back = maxspeed end end result.forward_speed = speed_forw result.backward_speed = speed_back end if oneway == "no" or oneway == "0" or oneway == "false" then -- nothing to do elseif oneway == "-1" then result.forward_mode = mode.inaccessible elseif oneway == "yes" or oneway == "1" or oneway == "true" or junction == "roundabout" then result.backward_mode = mode.inaccessible end if highway == 'motorway' then result.forward_classes["motorway"] = true result.backward_classes["motorway"] = true end if toll == "yes" then result.forward_classes["toll"] = true result.backward_classes["toll"] = true end if junction == 'roundabout' then result.roundabout = true end end function process_turn (profile, turn) if turn.is_u_turn then turn.duration = turn.duration + profile.properties.u_turn_penalty turn.weight = turn.weight + profile.properties.u_turn_penalty end if turn.has_traffic_light then turn.duration = turn.duration + profile.properties.traffic_light_penalty end end return { setup = setup, process_way = process_way, process_node = process_node, process_turn = process_turn }