mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-06-20 01:44:42 +02:00
curl script
This commit is contained in:
parent
cf292c6266
commit
0f5ff6ed45
2 changed files with 68 additions and 77 deletions
|
@ -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 %}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue