diff --git a/data/core.yaml b/data/core.yaml index b3c0a3a1e..5cc6fd21d 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -1558,6 +1558,8 @@ en: title: Use a bridge or tunnel use_different_layers: title: Use different layers + use_different_layers_or_levels: + title: Use different layers or levels use_different_levels: title: Use different levels use_tunnel: diff --git a/dist/locales/en.json b/dist/locales/en.json index 69efd0175..9d505660e 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -1952,6 +1952,9 @@ "use_different_layers": { "title": "Use different layers" }, + "use_different_layers_or_levels": { + "title": "Use different layers or levels" + }, "use_different_levels": { "title": "Use different levels" }, diff --git a/modules/validations/close_nodes.js b/modules/validations/close_nodes.js index 274f6dcbb..0f7efc7aa 100644 --- a/modules/validations/close_nodes.js +++ b/modules/validations/close_nodes.js @@ -134,6 +134,19 @@ export function validationCloseNodes(context) { if (nearby.loc === node.loc || geoSphericalDistance(node.loc, nearby.loc) < pointThresholdMeters) { + // allow very close points if the z-axis varies + var zAxisKeys = { layer: true, level: true }; + var zAxisDifferentiates = false; + for (var key in zAxisKeys) { + var nodeValue = node.tags[key] || '0'; + var nearbyValue = nearby.tags[key] || '0'; + if (nodeValue !== nearbyValue) { + zAxisDifferentiates = true; + break; + } + } + if (zAxisDifferentiates) continue; + issues.push(new validationIssue({ type: type, severity: 'warning', @@ -151,6 +164,10 @@ export function validationCloseNodes(context) { new validationIssueFix({ icon: 'iD-operation-disconnect', title: t('issues.fix.move_points_apart.title') + }), + new validationIssueFix({ + icon: 'iD-icon-layers', + title: t('issues.fix.use_different_layers_or_levels.title') }) ] }));