enhance and move geojson property sanitation to data layer module

This commit is contained in:
Martin Raifer
2021-11-23 12:53:10 +01:00
parent cc0ae0a714
commit 3373f1b53d
2 changed files with 21 additions and 15 deletions

View File

@@ -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;
}

View File

@@ -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;
};