From bd97df6aaceaac1073730875407a8b2eaeac1a85 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Mon, 2 Aug 2021 12:07:13 -0400 Subject: [PATCH] In general, preserve existing values for tags that can be toplevel We'll only _replace_ the tag value if this tag is the toplevel/defining tag for the matched item (`k`) (closes #8615) --- modules/services/nsi.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/services/nsi.js b/modules/services/nsi.js index e3454c7ec..aea2d8782 100644 --- a/modules/services/nsi.js +++ b/modules/services/nsi.js @@ -488,9 +488,15 @@ function _upgradeTags(tags, loc) { const properties = category.properties || {}; // Preserve some tags that we specifically don't want NSI to overwrite. ('^name', sometimes) - const preserveTags = item.preserveTags || properties.preserveTags || []; - let regexes = preserveTags.map(s => new RegExp(s, 'i')); - regexes.push(/^building$/i, /^takeaway$/i); + let preserveTags = item.preserveTags || properties.preserveTags || []; + + // These tags can be toplevel tags -or- attributes - so we generally want to preserve existing values - #8615 + // We'll only _replace_ the tag value if this tag is the toplevel/defining tag for the matched item (`k`) + ['building', 'emergency', 'internet_access', 'takeaway'].forEach(osmkey => { + if (k !== osmkey) preserveTags.push(`^${osmkey}$`); + }); + + const regexes = preserveTags.map(s => new RegExp(s, 'i')); let keepTags = {}; Object.keys(newTags).forEach(osmkey => { @@ -499,8 +505,8 @@ function _upgradeTags(tags, loc) { } }); - // Remove any primary tags ("amenity", "craft", "shop", "man_made", "route", etc) - // with a value like `amenity=yes` or `shop=yes` + // Remove any primary tags ("amenity", "craft", "shop", "man_made", "route", etc) that have a + // value like `amenity=yes` or `shop=yes` (exceptions have already been added to `keepTags` above) _nsi.kvt.forEach((vmap, k) => { if (newTags[k] === 'yes') delete newTags[k]; });