curl script

This commit is contained in:
Tykayn 2025-06-01 20:08:57 +02:00 committed by tykayn
parent cf292c6266
commit 0f5ff6ed45
2 changed files with 68 additions and 77 deletions

View file

@ -34,12 +34,34 @@
center: [2.3488, 48.8534], // Paris
zoom: 10
});
// Fonction pour obtenir la couleur selon le pourcentage
function getColorFromPercent(percent) {
const red = Math.round(255 * (1 - percent/100));
const green = Math.round(255 * (percent/100));
return `rgb(${red}, ${green}, 0)`;
}
// Ajouter les marqueurs pour chaque zone
// Fonction pour récupérer tous les centroides des codes postaux en une seule requête
async function getAllPostalCodesCoordinates() {
const postalCodes = [{% for stat in stats %}'{{ stat.zone }}'{% if not loop.last %}, {% endif %}{% endfor %}];
// Attendre le chargement du DOM
document.addEventListener('DOMContentLoaded', function() {
// Récupérer le bouton labourer
const btnLabourer = document.querySelector('#labourer');
if (btnLabourer) {
// Ajouter l'écouteur d'événement click
btnLabourer.addEventListener('click', function() {
// Récupérer la valeur du code postal
const codePostal = document.querySelector('#app_admin_labourer').value;
// Rediriger vers la route de labourage avec le code postal
window.location.href = `/admin/labourer/${codePostal}`;
});
}
const postalCodes = [{% for stat in stats %}'{{ stat.zone }}'{% if not loop.last %}, {% endif %}{% endfor %}];
console.log(postalCodes);
let postalLines = ``;
postalCodes.forEach(code => {
if (/^\d+$/.test(code)) {
@ -59,92 +81,45 @@
});
const data = await response.json();
return data.elements.reduce((acc, element) => {
// On associe chaque code postal à ses coordonnées
const postalCode = element.tags.postal_code;
// Vérifier que le lieu a un nom non vide
if (postalCode && element.tags.name && element.tags.name.trim() !== '') {
acc[postalCode] = [element.lon, element.lat];
}
return acc;
}, {});
}
// Fonction pour obtenir la couleur selon le pourcentage
function getColorFromPercent(percent) {
const red = Math.round(255 * (1 - percent/100));
const green = Math.round(255 * (percent/100));
return `rgb(${red}, ${green}, 0)`;
}
// On récupère toutes les coordonnées en une seule fois
getAllPostalCodesCoordinates().then(coordinatesMap => {
console.log(data);
// Ajouter un marqueur pour chaque point de la réponse
const bounds = new maplibregl.LngLatBounds();
{% for stat in stats %}
const coordinatesMapped{{ stat.zone }} = coordinatesMap['{{ stat.zone }}'];
if (coordinatesMapped{{ stat.zone }}) {
data.elements.forEach(element => {
if (element.lat && element.lon) {
bounds.extend([element.lon, element.lat]);
const el = document.createElement('div');
el.style.width = '20px';
el.style.height = '20px';
el.className = 'marker';
el.style.width = '10px';
el.style.height = '10px';
el.style.borderRadius = '50%';
el.style.backgroundColor = getColorFromPercent({{ stat.completionPercent }});
// Créer un élément pour le marqueur du code postal
const postalEl = document.createElement('div');
postalEl.style.width = '15px';
postalEl.style.height = '15px';
postalEl.style.borderRadius = '50%';
postalEl.style.backgroundColor = '#0000ff';
postalEl.style.border = '2px solid white';
postalEl.style.boxShadow = '0 0 4px rgba(0,0,0,0.5)';
// Ajouter le marqueur principal
el.style.backgroundColor = '#ff0000';
new maplibregl.Marker(el)
.setLngLat(coordinatesMapped{{ stat.zone }})
.setPopup(new maplibregl.Popup().setHTML(`
<h3>{{ stat.zone }}</h3>
<p>Nombre de commerces: {{ stat.placesCount }}</p>
<p>Complétude: {{ stat.completionPercent }}%</p>
`))
.setLngLat([element.lon, element.lat])
.setPopup(new maplibregl.Popup({ offset: 25 })
.setHTML(`<h4>${element.tags?.name || 'Sans nom'}</h4>`))
.addTo(map);
// Ajouter le marqueur du code postal légèrement décalé
const [lon, lat] = coordinatesMapped{{ stat.zone }};
new maplibregl.Marker(postalEl)
.setLngLat([lon + 0.001, lat + 0.001]) // Décalage de 0.001 degré
.setPopup(new maplibregl.Popup().setHTML(`
<h4>Code Postal: {{ stat.zone }}</h4>
<p>Zone: {{ stat.zone }}</p>
`))
.addTo(map);
bounds.extend(coordinatesMapped{{ stat.zone }});
}
{% endfor %}
// Ajuster la vue pour montrer tous les marqueurs
});
// Recentrer la carte sur les marqueurs
if (!bounds.isEmpty()) {
map.fitBounds(bounds, {
padding: 50
});
}
});
// Attendre le chargement du DOM
document.addEventListener('DOMContentLoaded', function() {
// Récupérer le bouton labourer
const btnLabourer = document.querySelector('#labourer');
if (btnLabourer) {
// Ajouter l'écouteur d'événement click
btnLabourer.addEventListener('click', function() {
// Récupérer la valeur du code postal
const codePostal = document.querySelector('#app_admin_labourer').value;
// Rediriger vers la route de labourage avec le code postal
window.location.href = `/admin/labourer/${codePostal}`;
});
}
return data.elements.reduce((acc, element) => {
if (element.tags?.['postal_code']) {
acc[element.tags['postal_code']] = [element.lon, element.lat];
}
return acc;
}, {});
});
</script>
{% endblock %}