handle engine convert fields

This commit is contained in:
Tykayn 2023-07-31 19:09:48 +02:00 committed by tykayn
parent a700faa12d
commit d57e744db3
3 changed files with 147 additions and 52 deletions

View File

@ -100,7 +100,7 @@ export default {
key_converted: null, key_converted: null,
conditional_values: { conditional_values: {
// ajout de trois tags si la valeur est yes // ajout de trois tags si la valeur est yes
yes: { "yes": {
tags_to_add: [ tags_to_add: [
{bicycle: "yes"}, {bicycle: "yes"},
{scooter: "yes"}, {scooter: "yes"},

View File

@ -2,10 +2,12 @@ import debugLog from './utils.mjs'
export default class { export default class {
config = {} config = {}
constructor (mappingConfig) { constructor (mappingConfig) {
this.setConfig(mappingConfig) this.setConfig(mappingConfig)
} }
setConfig (mappingConfig) { setConfig (mappingConfig) {
this.config = mappingConfig this.config = mappingConfig
} }
@ -13,8 +15,8 @@ export default class {
mapFeaturePoint (featurePointGeoJson) { mapFeaturePoint (featurePointGeoJson) {
let geoJSONConvertedPoint = {} let geoJSONConvertedPoint = {}
geoJSONConvertedPoint.properties = {... this.config.default_properties_of_point}; geoJSONConvertedPoint.properties = { ...this.config.default_properties_of_point }
geoJSONConvertedPoint.type = featurePointGeoJson.type; geoJSONConvertedPoint.type = featurePointGeoJson.type
geoJSONConvertedPoint.geometry = featurePointGeoJson.geometry geoJSONConvertedPoint.geometry = featurePointGeoJson.geometry
let props = featurePointGeoJson.properties let props = featurePointGeoJson.properties
@ -23,15 +25,17 @@ export default class {
}) })
return geoJSONConvertedPoint; return geoJSONConvertedPoint
} }
isBooleanKey (pointKeyName) { isBooleanKey (pointKeyName) {
return listOfBooleanKeys.indexOf(pointKeyName) !== -1 return listOfBooleanKeys.indexOf(pointKeyName) !== -1
} }
truthyValues = ['true', 'True', 'TRUE', '1', 1]
falsyValues = ['false', 'False', 'FALSE', '0', 0]
/** /**
* retuns the converted element from mapping config if present, null otherwise * retuns the converted element from mapping config if present, null otherwise
*/ */
@ -55,16 +59,75 @@ export default class {
if (mappingKeys.indexOf(pointKeyName) !== -1) { if (mappingKeys.indexOf(pointKeyName) !== -1) {
debugLog('found element', pointKeyName, '=>', mappingConfig[pointKeyName], 'value : ', featurePoint.properties[pointKeyName]) debugLog('found element', pointKeyName, '=>', mappingConfig[pointKeyName], 'value : ', featurePoint.properties[pointKeyName])
let convertedValue = '' let convertedValue = ''
if (isBooleanKey(pointKeyName)) {
convertedValue = featurePoint.properties[pointKeyName].toLowerCase() == 'true' ? 'yes' : 'no' let valueConvertedFromMapping = featurePoint.properties[pointKeyName]
let typeofValue = typeof valueConvertedFromMapping
let isStringValue = typeofValue === 'string'
console.log('typeof featurePoint.properties[pointKeyName] === \'string\'', typeofValue)
let isConfigMappingObject = typeofValue === 'string'
if (isStringValue) {
if (isBooleanKey(pointKeyName)) {
convertedValue = (valueConvertedFromMapping + '').toLowerCase() == 'true' ? 'yes' : 'no'
} else { } else {
convertedValue = featurePoint.properties[pointKeyName] convertedValue = valueConvertedFromMapping
} }
if (convertedValue) { if (convertedValue) {
newProperties[mappingConfig[pointKeyName]] = convertedValue newProperties[mappingConfig[pointKeyName]] = convertedValue
} }
} else if (isConfigMappingObject) {
let newKey = ''
let configObject = valueConvertedFromMapping
if (configObject.key_converted) {
newKey = configObject.key_converted
}
/**
* gestion des valeurs conditionnelles
* nous pouvons renseigner une string ou un objet décrivant les transformations à réaliser
*/
if (configObject.conditional_values) {
let keysConditionnalValues = Object.keys(configObject.conditional_values)
let isFoundValue = keysConditionnalValues.indexOf(valueConvertedFromMapping)
if (isFoundValue !== -1) {
let conditionnalConfig = keysConditionnalValues[isFoundValue]
if (conditionnalConfig.tags_to_add) {
// on peut définir un ensemble de tags à rajouter
newProperties.push(...conditionnalConfig.tags_to_add)
}
if (conditionnalConfig.truthy_value) {
// convertir la valeur, si elle est truthy, la transformer en ce que donne la propriété truthy_value
// exemple: le jeu de données dit que la colonne cable_t2_attache vaut "True", mais on veut le convertir en "1".
// on met donc truthy_value: '1'
if (this.truthyValues.indexOf( valueConvertedFromMapping) !== -1) {
convertedValue = conditionnalConfig.truthy_value
}
}
if (conditionnalConfig.falsy_value) {
if (this.falsyValues.indexOf( valueConvertedFromMapping) !== -1) {
convertedValue = conditionnalConfig.falsy_value
}
}
if (conditionnalConfig.transform_function) {
// une transformation de la valeur
// apply transformation to value
convertedValue = conditionnalConfig.transform_function(valueConvertedFromMapping)
}
// use the value converted
else if (conditionnalConfig.value_converted) {
convertedValue = conditionnalConfig.value_converted
}
}
}
if (newKey && !configObject.ignore_this_data) {
newProperties[newKey] = convertedValue
}
}
} }
}) })

View File

@ -0,0 +1,32 @@
let show_debug = 0
/**
* faire un log
* @param message
*/
function debugLog (message) {
if (!show_debug) {
return
}
console.log('debug: ', ...message)
}
/**
*
* @param pointKeyName
* @returns {boolean}
*/
function openCSV(filePath) {
console.log('open csv filePath')
return
}
export default
{
debugLog,
isBooleanKey
}