mirror of
https://forge.chapril.org/tykayn/libre-charge-map
synced 2025-06-20 01:34:43 +02:00
178 lines
7.3 KiB
JavaScript
178 lines
7.3 KiB
JavaScript
/**
|
|
* utilitaires pour la qualité des données et deviner les puissances de stations de recharge
|
|
*/
|
|
|
|
export const valid_qa_message = '<span class="quality-ok">✔ Aucun problème de qualité</span>' // message affiché lorsque tout est bon
|
|
export const show_all_alerts = true // afficher ou non toutes les alertes, ou seulement les alertes critiques
|
|
|
|
|
|
const lcm_utils = {
|
|
|
|
/**
|
|
* fouiller dans les tags les valeurs explicites de puissance déclarée.
|
|
* Deviner aussi les puissances non déclarées:
|
|
* - type 2 présent, max 43kW
|
|
* - type Chademo présent, max 63kW
|
|
* https://forum.openstreetmap.fr/t/bornes-de-recharges-et-puissance-chargeurs-quel-est-votre-avis/27828
|
|
*
|
|
* @param feature
|
|
* @returns {number}
|
|
*/
|
|
guessOutputPowerFromFeature: (feature) => {
|
|
let outputPower = 0
|
|
let power = 0
|
|
if (feature.properties && feature.properties.tags) {
|
|
|
|
let found_type_2 = false
|
|
let found_type_chademo = false
|
|
// deviner les puissances max selon les capacités de prises
|
|
for (var tag in feature.properties.tags) {
|
|
if (tag.indexOf('type2') !== -1) {
|
|
|
|
found_type_2 = true
|
|
power = 43
|
|
}
|
|
if (tag.indexOf('chademo') !== -1) {
|
|
found_type_chademo = true
|
|
power = 63
|
|
}
|
|
let value = feature.properties.tags[tag]
|
|
if (value && tag.toLowerCase().indexOf('output') !== -1) {
|
|
value = '' + value
|
|
if (value.indexOf(';') !== -1) {
|
|
// console.log('value output multiple', value)
|
|
let explode = value.split(';')
|
|
explode.forEach(elem => {
|
|
if (value.replace) {
|
|
value = value.replace(' ')
|
|
value = value.replace('kW', '')
|
|
}
|
|
let power = parseInt(value)
|
|
if (power > outputPower) {
|
|
outputPower = power
|
|
}
|
|
})
|
|
} else {
|
|
if (value.replace) {
|
|
value = value.replace(' ')
|
|
value = value.replace('kW', '')
|
|
}
|
|
let power = parseInt(value)
|
|
if (power > outputPower) {
|
|
outputPower = power
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
feature.properties.outputPower = outputPower
|
|
return outputPower
|
|
},
|
|
|
|
displayBadTagsFromFeature: (feature) => {
|
|
|
|
let content = ''
|
|
let content_combo_output = ''
|
|
let content_truefalse = ''
|
|
let content_puissance_station = ''
|
|
// tag de prise sans output
|
|
if (feature.properties.tags['socket: type2_combo'] && !feature.properties.tags['socket: type2_combo:output']) {
|
|
content_combo_output += '<span class="quality-alert"> <img src="img/type2_combo.svg" alt="Prise type 2 combo"> Prise type 2 combo sans puissance déclarée</span>'
|
|
}
|
|
// tag de prise sans output
|
|
if (!feature.properties.tags['charging_station:output']) {
|
|
content_puissance_station += '<span class="quality-alert">⚡ Pas de puissance déclarée pour la station</span>'
|
|
}
|
|
|
|
// Vérifier les tags de puissance qui ne devraient pas contenir de point-virgule
|
|
for (let tag in feature.properties.tags) {
|
|
if (tag.includes(':output')) {
|
|
let value = feature.properties.tags[tag];
|
|
if (value && value.includes(';')) {
|
|
content += `<div class="quality-alert"> <img src="img/fountain.png" alt="output"> Le tag "${tag}" ne devrait pas contenir de point-virgule dans sa valeur</div>`;
|
|
}
|
|
// Vérifier si la valeur est zéro
|
|
|
|
if (value === '0' || value === 0 || value === '0 kW') {
|
|
content += `<div class="quality-alert"> <img src="img/prise_inconnue.svg" alt="output"> Le tag "${tag}" ne devrait pas avoir une valeur de zéro</div>`;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Vérifier si aucun tag ne contient "socket"
|
|
let hasSocketTag = false;
|
|
for (let tag in feature.properties.tags) {
|
|
if (tag.includes('socket')) {
|
|
hasSocketTag = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!hasSocketTag) {
|
|
content += '<div class="quality-alert">Aucune tag détaillant le <b class="quality-emphasis">socket:*</b></div>';
|
|
}
|
|
|
|
if (!feature.properties.tags['ref:EU:EVSE']) {
|
|
content += '<div class="quality-alert">Pas de référence <b class="quality-emphasis">ref:EU:EVSE</b></div>'
|
|
}
|
|
|
|
if (!feature.properties.tags['capacity']) {
|
|
content += '<div class="quality-alert">Pas de nombre de places donné avec <b class="quality-emphasis">capacity</b></div>'
|
|
}
|
|
|
|
if (!feature.properties.tags['network']) {
|
|
content += '<div class="quality-alert">Pas de réseau de recharge déclaré</div>'
|
|
}
|
|
// Vérifier les valeurs true/false dans les tags
|
|
for (let tag in feature.properties.tags) {
|
|
let value = feature.properties.tags[tag];
|
|
if (value === 'true' || value === 'false') {
|
|
content_truefalse = `<div class="quality-alert">Le tag <b class="quality-emphasis">${tag}</b> utilise <b class="quality-emphasis">true/false</b> au lieu de <b class="quality-emphasis">yes/no</b></div>`;
|
|
}
|
|
}
|
|
if (!show_all_alerts) {
|
|
return content = `
|
|
${content_truefalse}
|
|
${content_combo_output}
|
|
`
|
|
// ${content_puissance_station}
|
|
} else {
|
|
content = content_truefalse + content_combo_output + content_puissance_station + content
|
|
}
|
|
|
|
|
|
|
|
if (!content) {
|
|
content = '' + valid_qa_message
|
|
}
|
|
|
|
return content;
|
|
},
|
|
|
|
/**
|
|
* villes les plus peuplées de France
|
|
*/
|
|
cities: [
|
|
{ name: 'Paris', coords: [48.8566, 2.3522] },
|
|
{ name: 'Marseille', coords: [43.2965, 5.3698] },
|
|
{ name: 'Lyon', coords: [45.7640, 4.8357] },
|
|
{ name: 'Toulouse', coords: [43.6042, 1.4437] },
|
|
{ name: 'Nice', coords: [43.7101, 7.2620] },
|
|
{ name: 'Nantes', coords: [47.2184, -1.5536] },
|
|
{ name: 'Strasbourg', coords: [48.5831, 7.7521] },
|
|
{ name: 'Montpellier', coords: [43.6167, 3.8742] },
|
|
{ name: 'Bordeaux', coords: [44.8378, -0.5792] },
|
|
{ name: 'Lille', coords: [50.6293, 3.1466] },
|
|
{ name: 'Rennes', coords: [48.1120, -1.6823] },
|
|
{ name: 'Toulon', coords: [43.1230, 5.9291] },
|
|
{ name: 'Le Havre', coords: [49.4943, 0.1079] },
|
|
{ name: 'Saint-Etienne', coords: [45.4380, 4.3841] },
|
|
{ name: 'Grenoble', coords: [45.1667, 5.7295] },
|
|
{ name: 'Rouen', coords: [49.4431, 1.0820] },
|
|
{ name: 'Dijon', coords: [47.3221, 5.0446] },
|
|
{ name: 'Angers', coords: [47.4786, -0.5551] },
|
|
{ name: 'Nîmes', coords: [43.8366, 4.3623] },
|
|
{ name: 'Reims', coords: [49.2500, 4.0333] }
|
|
]
|
|
}
|
|
export default lcm_utils
|