lua: refactor destination helper

This commit is contained in:
Emil Tin 2016-11-17 00:26:39 +01:00 committed by Patrick Niklaus
parent dce685c780
commit 00f7d7776d
3 changed files with 38 additions and 56 deletions

View File

@ -43,7 +43,7 @@ mode = {
-- input tags, normally extracted from OSM data
local way = {
highway = 'primary',
highway = 'motorway',
name = 'Main Street',
--width = '3',
--maxspeed = '30',
@ -57,6 +57,9 @@ local way = {
--duration = '00:01:00',
--hov = 'designated',
--access = 'no'
--destination = 'Berlin',
["destination:ref"] = 'Nuremberg',
--["destination:ref:forward"] = 'Hamburg;Dresden',
}
-- tag function normally provided via C++
function way:get_value_by_key(k)

View File

@ -1,53 +1,32 @@
local Destination = {}
function Destination.get_directional_tag(way, is_forward, tag)
local v
if is_forward then
v = way:get_value_by_key(tag .. ':forward') or way:get_value_by_key(tag)
else
v = way:get_value_by_key(tag .. ':backward') or way:get_value_by_key(tag)
end
if v then
return v.gsub(v, ';', ', ')
end
end
function Destination.join(a,b)
if a and b then
return a .. ': ' .. b
else
return a or b
end
end
-- Assemble destination as: "A59: Düsseldorf, Köln"
-- destination:ref ^ ^ destination
function Destination.get_destination(way, is_forward)
local destination = way:get_value_by_key("destination")
local destination_forward = way:get_value_by_key("destination:forward")
local destination_backward = way:get_value_by_key("destination:backward")
local destination_ref = way:get_value_by_key("destination:ref")
local destination_ref_forward = way:get_value_by_key("destination:ref:forward")
local destination_ref_backward = way:get_value_by_key("destination:ref:backward")
-- Assemble destination as: "A59: Düsseldorf, Köln"
-- destination:ref ^ ^ destination
local rv = ""
if destination_ref then
if is_forward == true and destination_ref == "" then
if destination_ref_forward then
destination_ref = destination_ref_forward
end
elseif is_forward == false then
if destination_ref_backward then
destination_ref = destination_ref_backward
end
end
rv = rv .. string.gsub(destination_ref, ";", ", ")
end
if destination then
if is_forward == true and destination == "" then
if destination_forward then
destination = destination_forward
end
elseif is_forward == false then
if destination_backward then
destination = destination_backward
end
end
if destination ~= "" then
if rv ~= "" then
rv = rv .. ": "
end
rv = rv .. string.gsub(destination, ";", ", ")
end
end
return rv
destination_ref = Destination.get_directional_tag(way, is_forward, 'destination:ref')
destination = Destination.get_directional_tag(way, is_forward, 'destination')
return Destination.join(destination_ref, destination) or ''
end
return Destination

View File

@ -61,7 +61,7 @@ function Guidance.set_classification (highway, result, input_way)
end
local lane_count = input_way:get_value_by_key("lanes")
if lane_count and lane_count ~= "" then
if lane_count then
local lc = tonumber(lane_count)
if lc ~= nil then
result.road_classification.num_lanes = lc
@ -69,14 +69,14 @@ function Guidance.set_classification (highway, result, input_way)
else
local total_count = 0
local forward_count = input_way:get_value_by_key("lanes:forward")
if forward_count and forward_count ~= "" then
if forward_count then
local fc = tonumber(forward_count)
if fc ~= nil then
total_count = fc
end
end
local backward_count = input_way:get_value_by_key("lanes:backward")
if backward_count and backward_count ~= "" then
if backward_count then
local bc = tonumber(backward_count)
if bc ~= nil then
total_count = total_count + bc
@ -96,19 +96,19 @@ local function get_psv_counts(way)
local fw = 0;
local bw = 0;
if psv and psv ~= "" then
if psv then
fw = tonumber(psv)
if( fw == nil ) then
fw = 0
end
end
if psv_forward and psv_forward ~= "" then
if psv_forward then
fw = tonumber(psv_forward)
if( fw == nil ) then
fw = 0
end
end
if psv_backward and psv_backward ~= "" then
if psv_backward then
bw = tonumber(psv_backward);
if( bw == nil ) then
bw = 0
@ -119,8 +119,8 @@ end
-- trims lane string with regard to supported lanes
local function process_lanes(turn_lane,vehicle_lane,first_count,second_count)
if turn_lane and turn_lane ~= "" then
if vehicle_lane and vehicle_lane ~= "" then
if turn_lane then
if vehicle_lane then
turn_lane = applyAccessTokens(turn_lane,vehicle_lane)
elseif first_count ~= 0 or second_count ~= 0 then
turn_lane = trimLaneString(turn_lane, first_count, second_count)