92 lines
2.2 KiB
Lua
92 lines
2.2 KiB
Lua
local Directional = {}
|
|
|
|
-- return [forward,backward] values for a specific tag.
|
|
-- e.g. for maxspeed search forward:
|
|
-- maxspeed:forward
|
|
-- maxspeed
|
|
-- and backward:
|
|
-- maxspeed:backward
|
|
-- maxspeed
|
|
|
|
function Directional.get_values_by_key(way,data,key)
|
|
local forward = way:get_value_by_key(key .. ':forward')
|
|
local backward = way:get_value_by_key(key .. ':backward')
|
|
|
|
if forward and backward then
|
|
return forward, backward
|
|
end
|
|
|
|
local common = way:get_value_by_key(key)
|
|
return forward or common,
|
|
backward or common
|
|
end
|
|
|
|
-- return [forward,backward] values, searching a
|
|
-- prioritized sequence of tags
|
|
-- e.g. for the sequence [maxspeed,advisory] search forward:
|
|
-- maxspeed:forward
|
|
-- maxspeed
|
|
-- advisory:forward
|
|
-- advisory
|
|
-- and for backward:
|
|
-- maxspeed:backward
|
|
-- maxspeed
|
|
-- advisory:backward
|
|
-- advisory
|
|
|
|
function Directional.get_values_by_set(way,data,keys)
|
|
local forward, backward
|
|
for i,key in ipairs(keys) do
|
|
if not forward then
|
|
forward = way:get_value_by_key(key .. ':forward')
|
|
end
|
|
if not backward then
|
|
backward = way:get_value_by_key(key .. ':backward')
|
|
end
|
|
if not forward or not backward then
|
|
local common = way:get_value_by_key(key)
|
|
forward = forward or common
|
|
backward = backward or common
|
|
end
|
|
if forward and backward then
|
|
break
|
|
end
|
|
end
|
|
|
|
return forward, backward
|
|
end
|
|
|
|
-- look through a sequence of keys combined with a prefix
|
|
-- e.g. for the sequence [motorcar,motor_vehicle,vehicle] and the prefix 'oneway' search for:
|
|
-- oneway:motorcar
|
|
-- oneway:motor_vehicle
|
|
-- oneway:vehicle
|
|
|
|
function Directional.get_value_by_prefixed_sequence(way,seq,prefix)
|
|
local v
|
|
for i,key in ipairs(seq) do
|
|
v = way:get_value_by_key(prefix .. ':' .. key)
|
|
if v then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
|
|
-- look through a sequence of keys combined with a postfix
|
|
-- e.g. for the sequence [motorcar,motor_vehicle,vehicle] and the postfix 'oneway' search for:
|
|
-- motorcar:oneway
|
|
-- motor_vehicle:oneway
|
|
-- vehicle:oneway
|
|
|
|
function Directional.get_value_by_postfixed_sequence(way,seq,postfix)
|
|
local v
|
|
for i,key in ipairs(seq) do
|
|
v = way:get_value_by_key(key .. ':' .. postfix)
|
|
if v then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
return Directional |