calque affichant des infos QA

This commit is contained in:
Tykayn 2025-04-28 15:49:55 +02:00 committed by tykayn
parent 0f63309248
commit f19bff1953
8 changed files with 121 additions and 40 deletions

View file

@ -11,7 +11,8 @@ const lcm_config = {
filter_max_output_max: 499,
filter_max_output_default_value: 1,
filter_unknown_output: true,
display_alert_bad_tags: false,
display_restaurants_and_cafes: false,
max_possible_station_output: 499,
// Filtres pour les prises
filterCableAttached: false,

View file

@ -8,6 +8,7 @@ import lcm_config from './lcm_config.js'
import lcm_utils from './lcm_utils.js'
import lcm_color_utils from './lcm_color_utils.js'
import { sendToJOSM, createJOSMEditLink } from './lcm_editor.js'
import { valid_qa_message } from './lcm_utils.js'
let geojsondata;
let lastLatLng;
@ -246,6 +247,7 @@ function updateURLWithMapCoordinatesAndZoom() {
let all_stations_markers = L.layerGroup().addTo(map) // layer group pour tous les marqueurs
let bad_tags_markers = L.layerGroup()// layer group pour les marqueurs avec des problèmes de qualité
// let stations_much_speed_wow = L.layerGroup().addTo(map) // layer group des stations rapides
var osm = L.tileLayer(lcm_config.tileServers.osm, {
@ -680,6 +682,7 @@ function eachFeature(feature, layer, stats) {
return;
}
}
/**
* bornes sans informations, suggérer d'ajouter des tags dans OSM
*/
@ -692,7 +695,14 @@ function eachFeature(feature, layer, stats) {
// contenu de la popup
let html = `<span class="color-indication" style="background-color: ${lcm_color_utils.getColor(feature)};">${displayOutPowerGuessed}</span>
<span class="popup-content">${popupContent}</span>
<div class="popup-content">
<div class="socket-list">
${displaySocketsList(feature)}
</div>
<div class="other-infos">
${popupContent}
</div>
</div>
`
@ -796,6 +806,23 @@ function eachFeature(feature, layer, stats) {
}).addTo(all_stations_markers);
}
let badtags = lcm_utils.displayBadTagsFromFeature(feature);
if (badtags !== valid_qa_message) {
let circle_alert = L.circle(layer._latlng, {
color: 'red',
fillColor: 'orange',
fillOpacity: 0.5,
radius: radius * 1.2
});
circle_alert.bindTooltip(badtags, {
permanent: true,
direction: 'top'
}).addTo(bad_tags_markers);
}
circle.bindPopup(html, {
autoPan: false,
closeOnClick: false
@ -819,6 +846,7 @@ function eachFeature(feature, layer, stats) {
},
});
}
/**
@ -1376,9 +1404,23 @@ function init() {
refreshDisplay();
});
});
$('#filterBadTags').on('click', function () {
lcm_config.display_alert_bad_tags = !lcm_config.display_alert_bad_tags;
showActiveFilter(lcm_config.display_alert_bad_tags, '#filterBadTags');
if (lcm_config.display_alert_bad_tags) {
bad_tags_markers.clearLayers();
bad_tags_markers.addTo(map);
} else {
bad_tags_markers.remove();
}
refreshDisplay();
});
// food_places_markers.addTo(map);
if (lcm_config.display_restaurants_and_cafes) {
food_places_markers.addTo(map);
}
// Mettre à jour le contrôle des calques
const overlayMaps = {
@ -1386,7 +1428,8 @@ function init() {
// "🗺️ Fond de carte": baseLayers,
"⚡ Stations de recharge": all_stations_markers,
"☕ Restaurants et cafés": food_places_markers,
"💡 Bornes potentielles (Osmose)": osmose_markers
"💡 Bornes potentielles (Osmose)": osmose_markers,
"💡 Problèmes de qualité": bad_tags_markers
};
const overlayControl = L.control.layers(baseLayers, overlayMaps, {

View file

@ -1,4 +1,6 @@
export const valid_qa_message = '<span class="quality-ok">✔ Aucun problème de qualité</span>'
const lcm_utils = {
/**
* fouiller dans les tags les valeurs explicites de puissance déclarée.
* Deviner aussi les puissances non déclarées:
@ -78,38 +80,49 @@ const lcm_utils = {
if (tag.includes(':output')) {
let value = feature.properties.tags[tag];
if (value && value.includes(';')) {
content += `<span class="quality-alert">Le tag "${tag}" ne devrait pas contenir de point-virgule dans sa valeur</span>`;
content += `<div class="quality-alert">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 += `<span class="quality-alert">Le tag "${tag}" ne devrait pas avoir une valeur de zéro</span>`;
content += `<div class="quality-alert">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 += '<span class="quality-alert">Pas de référence ref:EU:EVSE</span>'
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 += '<span class="quality-alert">Pas de nombre de places donné avec capacity</span>'
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 += '<span class="quality-alert">Pas de réseau de recharge déclaré</span>'
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 += `<span class="quality-alert">Le tag "${tag}" utilise true/false au lieu de yes/no</span>`;
content += `<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 (!content) {
content = '<span class="quality-ok">Aucun problème de qualité</span>'
content = '' + valid_qa_message
}
return content;