liens de complétion de rue overpass

This commit is contained in:
Tykayn 2025-07-12 13:49:40 +02:00 committed by tykayn
parent 5490453764
commit b771aea541

View file

@ -30,13 +30,14 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
</div>
<div id="missing-streets-block" class="mt-5"> <div id="missing-streets-block" class="mt-5">
<h2>Rues sans lieu associé (données OSM)</h2> <h2>Rues sans lieu associé (données OSM)</h2>
<div id="missing-streets-loading">Chargement des rues OSM…</div> <div id="missing-streets-loading">Chargement des rues OSM…</div>
<ul id="missing-streets-list" class="list-group"></ul> <ul id="missing-streets-list" class="list-group"></ul>
</div> </div>
</div>
<script> <script>
function buildOverpassAroundUrl(street, bbox) { function buildOverpassAroundUrl(street, bbox) {
@ -94,31 +95,32 @@ out tags;
}) })
.then(r => r.json()) .then(r => r.json())
.then(data => { .then(data => {
const allStreets = new Set(); const allStreets = new Map();
(data.elements || []).forEach(el => { (data.elements || []).forEach(el => {
if (el.tags && el.tags.name) { if (el.tags && el.tags.name) {
allStreets.add(el.tags.name); allStreets.set(el.tags.name, el.id);
} }
}); });
// Filtrer les rues qui n'ont pas de lieu associé // Filtrer les rues qui n'ont pas de lieu associé
const missing = Array.from(allStreets).filter(nom => !ruesConnues.has(nom)); const missing = Array.from(allStreets.entries()).filter(([nom]) => !ruesConnues.has(nom));
const ul = document.getElementById('missing-streets-list'); const ul = document.getElementById('missing-streets-list');
ul.innerHTML = ''; ul.innerHTML = '';
if (missing.length === 0) { if (missing.length === 0) {
ul.innerHTML = '<li class="list-group-item text-success">Toutes les rues OSM ont au moins un lieu associé.</li>'; ul.innerHTML = '<li class="list-group-item text-success">Toutes les rues OSM ont au moins un lieu associé.</li>';
} else { } else {
missing.sort((a, b) => a.localeCompare(b, 'fr')); missing.sort((a, b) => a[0].localeCompare(b[0], 'fr'));
missing.forEach(nom => { missing.forEach(([nom, wayId]) => {
const li = document.createElement('li'); const li = document.createElement('li');
li.className = 'list-group-item d-flex justify-content-between align-items-center'; li.className = 'list-group-item d-flex justify-content-between align-items-center';
li.setAttribute('data-street-name', nom); li.setAttribute('data-street-name', nom);
li.setAttribute('data-way-id', wayId);
li.textContent = nom; li.textContent = nom;
const buttons = document.createElement('span'); const buttons = document.createElement('span');
buttons.innerHTML = ` buttons.innerHTML = `
<a href="#" class="btn btn-outline-secondary btn-sm osm-link" title="Voir la rue sur OpenStreetMap" target="_blank" data-street="${nom}"> <a href="https://www.openstreetmap.org/way/${wayId}" class="btn btn-outline-secondary btn-sm osm-link" title="Voir la rue sur OpenStreetMap" target="_blank" data-way-id="${wayId}">
<i class="bi bi-globe"></i> <i class="bi bi-globe"></i>
</a> </a>
<a href="#" class="btn btn-outline-primary btn-sm overpass-link ms-1" title="Lieux possibles sur Overpass" target="_blank" data-street="${nom}"> <a href="#" class="btn btn-outline-primary btn-sm overpass-link ms-1" title="Lieux possibles sur Overpass" target="_blank" data-way-id="${wayId}">
<i class="bi bi-ev-station"></i> <i class="bi bi-ev-station"></i>
</a> </a>
`; `;
@ -127,6 +129,16 @@ out tags;
}); });
} }
document.getElementById('missing-streets-loading').style.display = 'none'; document.getElementById('missing-streets-loading').style.display = 'none';
// Ajout des listeners pour les nouveaux boutons
document.querySelectorAll('.overpass-link').forEach(function(a) {
a.addEventListener('click', function(e) {
e.preventDefault();
const wayId = this.getAttribute('data-way-id');
const overpassQ = `[out:json][timeout:25];\nway(${wayId});\nnw(around.way:10)[shop];\nnw(around.way:10)[amenity];\nout body;\n>;
out skel qt;`;
window.open(`https://overpass-turbo.eu/?Q=${encodeURIComponent(overpassQ)}`, '_blank');
});
});
}) })
.catch(e => { .catch(e => {
document.getElementById('missing-streets-loading').textContent = 'Erreur lors de la récupération des rues OSM.'; document.getElementById('missing-streets-loading').textContent = 'Erreur lors de la récupération des rues OSM.';