Fix travel mode passing from profiles up to the API
This commit is contained in:
+35
-39
@@ -105,13 +105,6 @@ local safety_penalty = 1.0
|
||||
local use_public_transport = true
|
||||
local fallback_names = true
|
||||
|
||||
--modes
|
||||
local mode_normal = 1
|
||||
local mode_pushing = 2
|
||||
local mode_ferry = 3
|
||||
local mode_train = 4
|
||||
local mode_movable_bridge = 5
|
||||
|
||||
local function parse_maxspeed(source)
|
||||
if not source then
|
||||
return 0
|
||||
@@ -191,6 +184,9 @@ function way_function (way, result)
|
||||
return
|
||||
end
|
||||
|
||||
result.forward_mode = mode.cycling
|
||||
result.backward_mode = mode.cycling
|
||||
|
||||
-- other tags
|
||||
local name = way:get_value_by_key("name")
|
||||
local ref = way:get_value_by_key("ref")
|
||||
@@ -237,14 +233,14 @@ function way_function (way, result)
|
||||
if duration and durationIsValid(duration) then
|
||||
result.duration = math.max( parseDuration(duration), 1 )
|
||||
end
|
||||
result.forward_mode = mode_movable_bridge
|
||||
result.backward_mode = mode_movable_bridge
|
||||
result.forward_mode = mode.movable_bridge
|
||||
result.backward_mode = mode.movable_bridge
|
||||
result.forward_speed = bridge_speed
|
||||
result.backward_speed = bridge_speed
|
||||
elseif route_speeds[route] then
|
||||
-- ferries (doesn't cover routes tagged using relations)
|
||||
result.forward_mode = mode_ferry
|
||||
result.backward_mode = mode_ferry
|
||||
result.forward_mode = mode.ferry
|
||||
result.backward_mode = mode.ferry
|
||||
result.ignore_in_grid = true
|
||||
if duration and durationIsValid(duration) then
|
||||
result.duration = math.max( 1, parseDuration(duration) )
|
||||
@@ -262,8 +258,8 @@ function way_function (way, result)
|
||||
result.forward_speed = platform_speeds[public_transport]
|
||||
result.backward_speed = platform_speeds[public_transport]
|
||||
elseif use_public_transport and railway and railway_speeds[railway] then
|
||||
result.forward_mode = mode_train
|
||||
result.backward_mode = mode_train
|
||||
result.forward_mode = mode.train
|
||||
result.backward_mode = mode.train
|
||||
-- railways
|
||||
if access and access_tag_whitelist[access] then
|
||||
result.forward_speed = railway_speeds[railway]
|
||||
@@ -293,27 +289,27 @@ function way_function (way, result)
|
||||
-- pedestrian-only ways and areas
|
||||
result.forward_speed = pedestrian_speeds[highway]
|
||||
result.backward_speed = pedestrian_speeds[highway]
|
||||
result.forward_mode = mode_pushing
|
||||
result.backward_mode = mode_pushing
|
||||
result.forward_mode = mode.pushing_bike
|
||||
result.backward_mode = mode.pushing_bike
|
||||
elseif man_made and man_made_speeds[man_made] then
|
||||
-- man made structures
|
||||
result.forward_speed = man_made_speeds[man_made]
|
||||
result.backward_speed = man_made_speeds[man_made]
|
||||
result.forward_mode = mode_pushing
|
||||
result.backward_mode = mode_pushing
|
||||
result.forward_mode = mode.pushing_bike
|
||||
result.backward_mode = mode.pushing_bike
|
||||
elseif foot == 'yes' then
|
||||
result.forward_speed = walking_speed
|
||||
result.backward_speed = walking_speed
|
||||
result.forward_mode = mode_pushing
|
||||
result.backward_mode = mode_pushing
|
||||
result.forward_mode = mode.pushing_bike
|
||||
result.backward_mode = mode.pushing_bike
|
||||
elseif foot_forward == 'yes' then
|
||||
result.forward_speed = walking_speed
|
||||
result.forward_mode = mode_pushing
|
||||
result.backward_mode = 0
|
||||
result.forward_mode = mode.pushing_bike
|
||||
result.backward_mode = mode.inaccessible
|
||||
elseif foot_backward == 'yes' then
|
||||
result.forward_speed = walking_speed
|
||||
result.forward_mode = 0
|
||||
result.backward_mode = mode_pushing
|
||||
result.forward_mode = mode.inaccessible
|
||||
result.backward_mode = mode.pushing_bike
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -325,48 +321,48 @@ function way_function (way, result)
|
||||
end
|
||||
|
||||
if onewayClass == "yes" or onewayClass == "1" or onewayClass == "true" then
|
||||
result.backward_mode = 0
|
||||
result.backward_mode = mode.inaccessible
|
||||
elseif onewayClass == "no" or onewayClass == "0" or onewayClass == "false" then
|
||||
-- prevent implied oneway
|
||||
elseif onewayClass == "-1" then
|
||||
result.forward_mode = 0
|
||||
result.forward_mode = mode.inaccessible
|
||||
elseif oneway == "no" or oneway == "0" or oneway == "false" then
|
||||
-- prevent implied oneway
|
||||
elseif cycleway and string.find(cycleway, "opposite") == 1 then
|
||||
if impliedOneway then
|
||||
result.forward_mode = 0
|
||||
result.backward_mode = mode_normal
|
||||
result.forward_mode = mode.inaccessible
|
||||
result.backward_mode = mode.cycling
|
||||
result.backward_speed = bicycle_speeds["cycleway"]
|
||||
end
|
||||
elseif cycleway_left and cycleway_tags[cycleway_left] and cycleway_right and cycleway_tags[cycleway_right] then
|
||||
-- prevent implied
|
||||
elseif cycleway_left and cycleway_tags[cycleway_left] then
|
||||
if impliedOneway then
|
||||
result.forward_mode = 0
|
||||
result.backward_mode = mode_normal
|
||||
result.forward_mode = mode.inaccessible
|
||||
result.backward_mode = mode.cycling
|
||||
result.backward_speed = bicycle_speeds["cycleway"]
|
||||
end
|
||||
elseif cycleway_right and cycleway_tags[cycleway_right] then
|
||||
if impliedOneway then
|
||||
result.forward_mode = mode_normal
|
||||
result.forward_mode = mode.cycling
|
||||
result.backward_speed = bicycle_speeds["cycleway"]
|
||||
result.backward_mode = 0
|
||||
result.backward_mode = mode.cycling
|
||||
end
|
||||
elseif oneway == "-1" then
|
||||
result.forward_mode = 0
|
||||
result.forward_mode = mode.inaccessible
|
||||
elseif oneway == "yes" or oneway == "1" or oneway == "true" or impliedOneway then
|
||||
result.backward_mode = 0
|
||||
result.backward_mode = mode.inaccessible
|
||||
end
|
||||
|
||||
-- pushing bikes
|
||||
if bicycle_speeds[highway] or pedestrian_speeds[highway] then
|
||||
if foot ~= "no" and junction ~= "roundabout" then
|
||||
if result.backward_mode == 0 then
|
||||
if result.backward_mode == mode.inaccessible then
|
||||
result.backward_speed = walking_speed
|
||||
result.backward_mode = mode_pushing
|
||||
elseif result.forward_mode == 0 then
|
||||
result.backward_mode = mode.pushing_bike
|
||||
elseif result.forward_mode == mode.inaccessible then
|
||||
result.forward_speed = walking_speed
|
||||
result.forward_mode = mode_pushing
|
||||
result.forward_mode = mode.pushing_bike
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -382,8 +378,8 @@ function way_function (way, result)
|
||||
|
||||
-- dismount
|
||||
if bicycle == "dismount" then
|
||||
result.forward_mode = mode_pushing
|
||||
result.backward_mode = mode_pushing
|
||||
result.forward_mode = mode.pushing_bike
|
||||
result.backward_mode = mode.pushing_bike
|
||||
result.forward_speed = walking_speed
|
||||
result.backward_speed = walking_speed
|
||||
end
|
||||
|
||||
+15
-17
@@ -149,11 +149,6 @@ local max = math.max
|
||||
|
||||
local speed_reduction = 0.8
|
||||
|
||||
--modes
|
||||
local mode_normal = 1
|
||||
local mode_ferry = 2
|
||||
local mode_movable_bridge = 3
|
||||
|
||||
function get_exceptions(vector)
|
||||
for i,v in ipairs(restriction_exception_tags) do
|
||||
vector:Add(v)
|
||||
@@ -248,6 +243,9 @@ function way_function (way, result)
|
||||
return
|
||||
end
|
||||
|
||||
result.forward_mode = mode.driving
|
||||
result.backward_mode = mode.driving
|
||||
|
||||
-- handling ferries and piers
|
||||
local route_speed = speed_profile[route]
|
||||
if (route_speed and route_speed > 0) then
|
||||
@@ -256,8 +254,8 @@ function way_function (way, result)
|
||||
if duration and durationIsValid(duration) then
|
||||
result.duration = max( parseDuration(duration), 1 )
|
||||
end
|
||||
result.forward_mode = mode_ferry
|
||||
result.backward_mode = mode_ferry
|
||||
result.forward_mode = mode.ferry
|
||||
result.backward_mode = mode.ferry
|
||||
result.forward_speed = route_speed
|
||||
result.backward_speed = route_speed
|
||||
end
|
||||
@@ -271,8 +269,8 @@ function way_function (way, result)
|
||||
if duration and durationIsValid(duration) then
|
||||
result.duration = max( parseDuration(duration), 1 )
|
||||
end
|
||||
result.forward_mode = mode_movable_bridge
|
||||
result.backward_mode = mode_movable_bridge
|
||||
result.forward_mode = mode.movable_bridge
|
||||
result.backward_mode = mode.movable_bridge
|
||||
result.forward_speed = bridge_speed
|
||||
result.backward_speed = bridge_speed
|
||||
end
|
||||
@@ -378,14 +376,14 @@ function way_function (way, result)
|
||||
-- Set direction according to tags on way
|
||||
if obey_oneway then
|
||||
if oneway == "-1" then
|
||||
result.forward_mode = 0
|
||||
result.forward_mode = mode.inaccessible
|
||||
elseif oneway == "yes" or
|
||||
oneway == "1" or
|
||||
oneway == "true" or
|
||||
junction == "roundabout" or
|
||||
(highway == "motorway_link" and oneway ~="no") or
|
||||
(highway == "motorway" and oneway ~= "no") then
|
||||
result.backward_mode = 0
|
||||
result.backward_mode = mode.inaccessible
|
||||
end
|
||||
end
|
||||
|
||||
@@ -393,7 +391,7 @@ function way_function (way, result)
|
||||
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
|
||||
if mode.inaccessible ~= result.forward_mode and mode.inaccessible ~= result.backward_mode then
|
||||
result.backward_speed = result.forward_speed
|
||||
end
|
||||
result.forward_speed = maxspeed_forward
|
||||
@@ -408,15 +406,15 @@ function way_function (way, result)
|
||||
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
|
||||
if mode.inaccessible ~= result.forward_mode then
|
||||
result.forward_speed = advisory_speed
|
||||
end
|
||||
if 0 ~= result.backward_mode then
|
||||
if mode.inaccessible ~= 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
|
||||
if mode.inaccessible ~= result.forward_mode and mode.inaccessible ~= result.backward_mode then
|
||||
result.backward_speed = result.forward_speed
|
||||
end
|
||||
result.forward_speed = advisory_forward
|
||||
@@ -439,7 +437,7 @@ function way_function (way, result)
|
||||
end
|
||||
end
|
||||
|
||||
local is_bidirectional = result.forward_mode ~= 0 and result.backward_mode ~= 0
|
||||
local is_bidirectional = result.forward_mode ~= mode.inaccessible and result.backward_mode ~= mode.inaccessible
|
||||
|
||||
-- scale speeds to get better avg driving times
|
||||
if result.forward_speed > 0 then
|
||||
@@ -461,7 +459,7 @@ function way_function (way, result)
|
||||
end
|
||||
|
||||
-- only allow this road as start point if it not a ferry
|
||||
result.is_startpoint = result.forward_mode == mode_normal or result.backward_mode == mode_normal
|
||||
result.is_startpoint = result.forward_mode == mode.driving or result.backward_mode == mode.driving
|
||||
end
|
||||
|
||||
function turn_function (angle)
|
||||
|
||||
+7
-8
@@ -69,10 +69,6 @@ u_turn_penalty = 2
|
||||
use_turn_restrictions = false
|
||||
local fallback_names = true
|
||||
|
||||
--modes
|
||||
local mode_normal = 1
|
||||
local mode_ferry = 2
|
||||
|
||||
function get_exceptions(vector)
|
||||
for i,v in ipairs(restriction_exception_tags) do
|
||||
vector:Add(v)
|
||||
@@ -138,6 +134,9 @@ function way_function (way, result)
|
||||
return
|
||||
end
|
||||
|
||||
result.forward_mode = mode.walking
|
||||
result.backward_mode = mode.walking
|
||||
|
||||
local name = way:get_value_by_key("name")
|
||||
local ref = way:get_value_by_key("ref")
|
||||
local junction = way:get_value_by_key("junction")
|
||||
@@ -175,8 +174,8 @@ function way_function (way, result)
|
||||
result.forward_speed = route_speeds[route]
|
||||
result.backward_speed = route_speeds[route]
|
||||
end
|
||||
result.forward_mode = mode_ferry
|
||||
result.backward_mode = mode_ferry
|
||||
result.forward_mode = mode.ferry
|
||||
result.backward_mode = mode.ferry
|
||||
elseif railway and platform_speeds[railway] then
|
||||
-- railway platforms (old tagging scheme)
|
||||
result.forward_speed = platform_speeds[railway]
|
||||
@@ -205,11 +204,11 @@ function way_function (way, result)
|
||||
|
||||
-- oneway
|
||||
if onewayClass == "yes" or onewayClass == "1" or onewayClass == "true" then
|
||||
result.backward_mode = 0
|
||||
result.backward_mode = mode.inaccessible
|
||||
elseif onewayClass == "no" or onewayClass == "0" or onewayClass == "false" then
|
||||
-- nothing to do
|
||||
elseif onewayClass == "-1" then
|
||||
result.forward_mode = 0
|
||||
result.forward_mode = mode.inaccessible
|
||||
end
|
||||
|
||||
-- surfaces
|
||||
|
||||
+10
-16
@@ -6,14 +6,6 @@
|
||||
-- Secondary road: 18km/h = 18000m/3600s = 100m/20s
|
||||
-- Tertiary road: 12km/h = 12000m/3600s = 100m/30s
|
||||
|
||||
-- modes:
|
||||
-- 1: normal
|
||||
-- 2: route
|
||||
-- 3: river downstream
|
||||
-- 4: river upstream
|
||||
-- 5: steps down
|
||||
-- 6: steps up
|
||||
|
||||
speed_profile = {
|
||||
["primary"] = 36,
|
||||
["secondary"] = 18,
|
||||
@@ -68,24 +60,26 @@ function way_function (way, result)
|
||||
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 = 2
|
||||
result.backward_mode = 2
|
||||
result.forward_mode = mode.route
|
||||
result.backward_mode = mode.route
|
||||
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
|
||||
result.forward_mode = 3
|
||||
result.backward_mode = 4
|
||||
result.forward_mode = mode.river_up
|
||||
result.backward_mode = mode.river_down
|
||||
speed_forw = temp_speed*1.5
|
||||
speed_back = temp_speed/1.5
|
||||
elseif highway == "steps" then
|
||||
result.forward_mode = 5
|
||||
result.backward_mode = 6
|
||||
result.forward_mode = mode.steps_up
|
||||
result.backward_mode = mode.steps_down
|
||||
end
|
||||
|
||||
if maxspeed_forward ~= nil and maxspeed_forward > 0 then
|
||||
@@ -111,9 +105,9 @@ function way_function (way, result)
|
||||
if oneway == "no" or oneway == "0" or oneway == "false" then
|
||||
-- nothing to do
|
||||
elseif oneway == "-1" then
|
||||
result.forward_mode = 0
|
||||
result.forward_mode = mode.inaccessible
|
||||
elseif oneway == "yes" or oneway == "1" or oneway == "true" or junction == "roundabout" then
|
||||
result.backward_mode = 0
|
||||
result.backward_mode = mode.inaccessible
|
||||
end
|
||||
|
||||
if junction == 'roundabout' then
|
||||
|
||||
Reference in New Issue
Block a user