From a7c08ad3400b4a27d4473787ca3e8e38f53a399a Mon Sep 17 00:00:00 2001 From: Justin Tracey Date: Sat, 15 Apr 2023 21:33:12 -0400 Subject: [PATCH 1/2] add crossing:markings tag when connecting crossing --- modules/validations/crossing_ways.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/validations/crossing_ways.js b/modules/validations/crossing_ways.js index 2195ea8e4a..b8795b814c 100644 --- a/modules/validations/crossing_ways.js +++ b/modules/validations/crossing_ways.js @@ -140,6 +140,8 @@ export function validationCrossingWays(context) { if ((entity1IsPath || entity2IsPath) && entity1IsPath !== entity2IsPath) { // one feature is a path but not both + if (!bothLines) return {}; + var roadFeature = entity1IsPath ? entity2 : entity1; if (nonCrossingHighways[roadFeature.tags.highway]) { // don't mark path connections with certain roads as crossings @@ -147,11 +149,15 @@ export function validationCrossingWays(context) { } var pathFeature = entity1IsPath ? entity1 : entity2; if (['marked', 'unmarked', 'traffic_signals', 'uncontrolled'].indexOf(pathFeature.tags.crossing) !== -1) { - // if the path is a crossing, match the crossing type - return bothLines ? { highway: 'crossing', crossing: pathFeature.tags.crossing } : {}; + // if the path is a crossing, match the crossing type and markings + var tags = { highway: 'crossing', crossing: pathFeature.tags.crossing }; + if ('crossing:markings' in pathFeature.tags) { + tags['crossing:markings'] = pathFeature.tags['crossing:markings']; + } + return tags; } // don't add a `crossing` subtag to ambiguous crossings - return bothLines ? { highway: 'crossing' } : {}; + return { highway: 'crossing' }; } return {}; } From 521911733a4294635572b5d703fff36fa1dea88b Mon Sep 17 00:00:00 2001 From: Kyle Hensel Date: Sat, 1 Jun 2024 22:17:31 +1000 Subject: [PATCH 2/2] add unit tests for `crossing:markings` --- test/spec/validations/crossing_ways.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/spec/validations/crossing_ways.js b/test/spec/validations/crossing_ways.js index 57ce0ff956..72fa17fd7a 100644 --- a/test/spec/validations/crossing_ways.js +++ b/test/spec/validations/crossing_ways.js @@ -233,6 +233,16 @@ describe('iD.validations.crossing_ways', function () { verifySingleCrossingIssue(validate(), { highway: 'crossing', crossing: 'unmarked' }); }); + it('copies over `crossing:markings`', function() { + createWaysWithOneCrossingPoint({ highway: 'residential' }, { highway: 'footway', crossing: 'marked', 'crossing:markings': 'zebra' }); + verifySingleCrossingIssue(validate(), { highway: 'crossing', crossing: 'marked', 'crossing:markings': 'zebra' }); + }); + + it('does not copy `crossing` and `crossing:markings` if the `crossing` tag has an unknown value', function() { + createWaysWithOneCrossingPoint({ highway: 'residential' }, { highway: 'footway', crossing: 'zebra', 'crossing:markings': 'zebra' }); + verifySingleCrossingIssue(validate(), { highway: 'crossing' }); + }); + it('flags road=track crossing footway', function() { createWaysWithOneCrossingPoint({ highway: 'track' }, { highway: 'footway' }); verifySingleCrossingIssue(validate(), {});