Guard against mis-tagging: only use destination tag in combination with oneway tag

This commit is contained in:
Daniel J. Hofmann 2016-04-29 12:28:03 +02:00 committed by Patrick Niklaus
parent 445e5bed49
commit c7e19396a4
No known key found for this signature in database
GPG Key ID: E426891B5F978B1B
2 changed files with 27 additions and 20 deletions

View File

@ -13,23 +13,26 @@ Feature: Destination Signs
| i | j | | i | j |
| k | l | | k | l |
| m | n | | m | n |
| o | p |
And the ways And the ways
| nodes | name | ref | destination | destination:ref | | nodes | name | ref | destination | destination:ref | oneway | # |
| ab | AB | E1 | | | | ab | AB | E1 | | | yes | |
| cd | CD | | Berlin | | | cd | CD | | Berlin | | yes | |
| ef | EF | | Berlin | A1 | | ef | EF | | Berlin | A1 | yes | |
| gh | | | Berlin | A1 | | gh | | | Berlin | A1 | yes | |
| ij | | | Berlin | | | ij | | | Berlin | | yes | |
| kl | KL | E1 | Berlin | A1 | | kl | KL | E1 | Berlin | A1 | yes | |
| mn | MN | | Berlin;Hamburg | A1;A2 | | mn | MN | | Berlin;Hamburg | A1;A2 | yes | |
| op | OP | | Berlin;Hamburg | A1;A2 | no | mis-tagged destination: not a oneway |
When I route I should get When I route I should get
| from | to | route | | from | to | route | # |
| a | b | AB (E1),AB (E1) | | a | b | AB (E1),AB (E1) | |
| c | d | CD (Berlin),CD (Berlin) | | c | d | CD (Berlin),CD (Berlin) | |
| e | f | EF (A1: Berlin),EF (A1: Berlin) | | e | f | EF (A1: Berlin),EF (A1: Berlin) | |
| g | h | , | | g | h | , | |
| i | j | , | | i | j | , | |
| k | l | KL (E1),KL (E1) | | k | l | KL (E1),KL (E1) | |
| m | n | MN (A1, A2: Berlin, Hamburg),MN (A1, A2: Berlin, Hamburg) | | m | n | MN (A1, A2: Berlin, Hamburg),MN (A1, A2: Berlin, Hamburg) | |
| o | p | OP,OP | guard against mis-tagging |

View File

@ -353,19 +353,15 @@ function way_function (way, result)
-- local barrier = way:get_value_by_key("barrier", "") -- local barrier = way:get_value_by_key("barrier", "")
-- local cycleway = way:get_value_by_key("cycleway", "") -- local cycleway = way:get_value_by_key("cycleway", "")
local service = way:get_value_by_key("service") local service = way:get_value_by_key("service")
local destination = get_destination(way)
-- Set the name that will be used for instructions -- Set the name that will be used for instructions
local has_ref = ref and "" ~= ref local has_ref = ref and "" ~= ref
local has_name = name and "" ~= name local has_name = name and "" ~= name
local has_destination = destination and "" ~= destination
if has_name and has_ref then if has_name and has_ref then
result.name = name .. " (" .. ref .. ")" result.name = name .. " (" .. ref .. ")"
elseif has_ref then elseif has_ref then
result.name = ref result.name = ref
elseif has_name and has_destination then
result.name = name .. " (" .. destination .. ")"
elseif has_name then elseif has_name then
result.name = name result.name = name
-- else -- else
@ -397,6 +393,14 @@ function way_function (way, result)
(highway == "motorway_link" and oneway ~="no") or (highway == "motorway_link" and oneway ~="no") or
(highway == "motorway" and oneway ~= "no") then (highway == "motorway" and oneway ~= "no") then
result.backward_mode = mode.inaccessible result.backward_mode = mode.inaccessible
-- If we're on a oneway and there is no ref tag, re-use destination tag as ref.
local destination = get_destination(way)
local has_destination = destination and "" ~= destination
if has_destination and has_name and not has_ref then
result.name = name .. " (" .. destination .. ")"
end
end end
end end