osrm-backend/profiles/testbot.lua

116 lines
3.4 KiB
Lua
Raw Normal View History

-- Testbot profile
-- Moves at fixed, well-known speeds, practical for testing speed and travel times:
2014-03-27 16:19:26 -04:00
-- Primary road: 36km/h = 36000m/3600s = 100m/10s
-- Secondary road: 18km/h = 18000m/3600s = 100m/20s
-- Tertiary road: 12km/h = 12000m/3600s = 100m/30s
2013-12-06 06:06:51 -05:00
speed_profile = {
2014-03-27 16:19:26 -04:00
["primary"] = 36,
["secondary"] = 18,
["tertiary"] = 12,
2014-08-11 02:30:04 -04:00
["steps"] = 6,
2014-03-27 16:19:26 -04:00
["default"] = 24
}
2012-09-28 10:47:44 -04:00
-- these settings are read directly by osrm
2016-04-12 12:47:00 -04:00
properties.continue_straight_at_waypoint = true
properties.use_turn_restrictions = true
properties.traffic_signal_penalty = 7 -- seconds
properties.u_turn_penalty = 20
properties.max_speed_for_map_matching = 30/3.6 --km -> m/s
2012-09-28 10:47:44 -04:00
2013-01-19 07:04:58 -05:00
function limit_speed(speed, limits)
2014-03-27 16:19:26 -04:00
-- don't use ipairs(), since it stops at the first nil value
for i=1, #limits do
limit = limits[i]
if limit ~= nil and limit > 0 then
if limit < speed then
return limit -- stop at first speedlimit that's smaller than speed
end
2013-01-19 07:04:58 -05:00
end
2014-03-27 16:19:26 -04:00
end
return speed
2013-01-19 07:04:58 -05:00
end
2012-09-28 10:47:44 -04:00
2014-08-27 12:10:04 -04:00
function node_function (node, result)
local traffic_signal = node:get_value_by_key("highway")
2012-09-28 09:57:54 -04:00
2014-08-27 12:10:04 -04:00
if traffic_signal and traffic_signal == "traffic_signals" then
result.traffic_lights = true
2014-03-27 16:19:26 -04:00
-- TODO: a way to set the penalty value
end
end
2014-08-27 12:10:04 -04:00
function way_function (way, result)
local highway = way:get_value_by_key("highway")
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
2016-05-13 13:18:00 -04:00
result.forward_mode = mode.driving
result.backward_mode = mode.driving
2014-08-27 12:10:04 -04:00
if duration and durationIsValid(duration) then
result.duration = math.max( 1, parseDuration(duration) )
result.forward_mode = mode.route
result.backward_mode = mode.route
2014-03-27 16:19:26 -04:00
else
local speed_forw = speed_profile[highway] or speed_profile['default']
local speed_back = speed_forw
if highway == "river" then
local temp_speed = speed_forw
2016-04-01 05:39:47 -04:00
result.forward_mode = mode.river_down
result.backward_mode = mode.river_up
2014-03-27 16:19:26 -04:00
speed_forw = temp_speed*1.5
speed_back = temp_speed/1.5
2014-08-11 02:30:04 -04:00
elseif highway == "steps" then
2016-04-01 05:39:47 -04:00
result.forward_mode = mode.steps_down
result.backward_mode = mode.steps_up
2014-08-18 09:38:07 -04:00
end
2014-03-27 16:19:26 -04:00
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
2014-08-27 12:10:04 -04:00
result.forward_speed = speed_forw
result.backward_speed = speed_back
2014-03-27 16:19:26 -04:00
end
if oneway == "no" or oneway == "0" or oneway == "false" then
2014-08-12 13:31:31 -04:00
-- nothing to do
2014-03-27 16:19:26 -04:00
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
2014-03-27 16:19:26 -04:00
end
if junction == 'roundabout' then
2014-08-27 12:10:04 -04:00
result.roundabout = true
end
end