diff --git a/modules/svg/data.js b/modules/svg/data.js index 3ddea8c9e..a88e4b0ff 100644 --- a/modules/svg/data.js +++ b/modules/svg/data.js @@ -315,6 +315,21 @@ export function svgData(projection, context, dispatch) { } + function stringifyGeojsonProperties(feature) { + const properties = feature.properties; + for (const key in properties) { + const property = properties[key]; + if (typeof property === 'number' || typeof property === 'boolean' || Array.isArray(property)) { + properties[key] = property.toString(); + } else if (property === null) { + properties[key] = 'null'; + } else if (typeof property === 'object') { + properties[key] = JSON.stringify(property); + } + } + } + + drawData.setFile = function(extension, data) { _template = null; _fileList = null; @@ -332,6 +347,11 @@ export function svgData(projection, context, dispatch) { case '.geojson': case '.json': gj = JSON.parse(data); + if (gj.type === 'FeatureCollection') { + gj.features.forEach(stringifyGeojsonProperties); + } else if (gj.type === 'Feature') { + stringifyGeojsonProperties(gj); + } break; } diff --git a/modules/ui/sections/raw_tag_editor.js b/modules/ui/sections/raw_tag_editor.js index 2d39703ab..6f552317b 100644 --- a/modules/ui/sections/raw_tag_editor.js +++ b/modules/ui/sections/raw_tag_editor.js @@ -11,20 +11,6 @@ import { t } from '../../core/localizer'; import { utilArrayDifference, utilArrayIdentical } from '../../util/array'; import { utilGetSetValue, utilNoAuto, utilRebind, utilTagDiff } from '../../util'; -/** - * This component is also used for custom map data, - * and geojson can contain numbers as values. - * We convert numbers to strings to avoid unexpected bugs. - * @param {{ [key: string]: any }} tags - */ -function stringifyNumbers(tags) { - for (const key in tags) { - if (typeof tags[key] === 'number') { - tags[key] = tags[key].toString(); - } - } - return tags; -} export function uiSectionRawTagEditor(id, context) { @@ -609,7 +595,7 @@ export function uiSectionRawTagEditor(id, context) { section.tags = function(val) { if (!arguments.length) return _tags; - _tags = stringifyNumbers(val); + _tags = val; return section; };