Refactor: Overpass nur via VLM, Panel ersetzt rechte Sidebar

- Overpass-Toggle aus Layer-Panel entfernt (kein Standalone-Modus)
- Overpass-Panel und UI-Script entfernt
- VLM-Panel nach rechts verschoben, ersetzt Sidebar wenn aktiv
- Sidebar wird automatisch ein-/ausgeblendet bei VLM Toggle
- VLM ruft Overpass API direkt auf (kein Umweg ueber OverpassUI)
- Ergebnis-Zaehler im VLM-Panel statt separatem Overpass-Panel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
Claude Dev
2026-03-26 00:24:51 +01:00
Ursprung 72bae57519
Commit 03b9abc991
4 geänderte Dateien mit 46 neuen und 36 gelöschten Zeilen

Datei anzeigen

@@ -159,13 +159,17 @@ const Globe = {
'layer-satellites': function(on) { on ? SatellitesLayer.start(Globe.viewer) : SatellitesLayer.stop(); },
'layer-cables': function(on) { on ? CablesLayer.start(Globe.viewer) : CablesLayer.stop(); },
'layer-infra': function(on) { on ? InfraLayer.start(Globe.viewer) : InfraLayer.stop(); },
'layer-overpass': function(on) {
if (on) { OverpassLayer.start(Globe.viewer); OverpassUI.show(); }
else { OverpassLayer.stop(); OverpassUI.hide(); }
},
'layer-vlm': function(on) {
if (on) { VlmUI.show(); }
else { VlmUI.hide(); }
var sidebar = document.getElementById('sidebar-right');
if (on) {
if (sidebar) sidebar.style.display = 'none';
OverpassLayer.start(Globe.viewer);
VlmUI.show();
} else {
VlmUI.hide();
OverpassLayer.stop();
if (sidebar) sidebar.style.display = '';
}
},
'layer-iss': function(on) { on ? ISSLayer.start(Globe.viewer) : ISSLayer.stop(); },
'layer-disasters': function(on) { on ? DisastersLayer.start(Globe.viewer) : DisastersLayer.stop(); },

Datei anzeigen

@@ -267,7 +267,8 @@ const VlmUI = {
var searchResult = document.getElementById('vlm-search-result');
if (searchResult) { searchResult.style.display = 'block'; searchResult.textContent = 'Generiere Overpass-Queries...'; searchResult.style.color = 'var(--text-dim)'; }
// Queries generieren
// 1. Queries generieren
var startTime = Date.now();
fetch('/api/vlm/generate-queries', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -280,23 +281,35 @@ const VlmUI = {
.then(function(data) {
if (searchResult) searchResult.textContent = 'Query generiert (' + data.tag_count + ' Tags). Suche OSM-Daten...';
// Overpass-Layer aktivieren und Query ausfuehren
var overpassCb = document.getElementById('layer-overpass');
if (overpassCb && !overpassCb.checked) {
overpassCb.checked = true;
overpassCb.dispatchEvent(new Event('change'));
}
// Query an Overpass senden
// 2. Overpass-Query direkt ausfuehren
OverpassLayer.setColor('#e040fb');
if (typeof OverpassUI !== 'undefined') {
OverpassUI.executeQueryDirect(data.query, bbox, '#e040fb');
return fetch('/api/overpass/query', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query: data.query, bbox: bbox }),
});
})
.then(function(r) {
if (r.status === 429) {
return r.json().then(function(d) { throw new Error(d.detail || 'Rate-Limit'); });
}
if (!r.ok) {
return r.json().then(function(d) { throw new Error(d.detail || 'Overpass-Fehler'); });
}
return r.json();
})
.then(function(data) {
var elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
OverpassLayer.render(data);
if (searchResult) {
searchResult.textContent = 'Overpass-Suche gestartet';
var text = data.total + ' Orte gefunden (' + elapsed + 's)';
if (data.cached) text += ' [Cache]';
if (data.truncated) text += ' [Limit erreicht]';
searchResult.textContent = text;
searchResult.style.color = 'var(--accent)';
}
var countEl = document.getElementById('count-vlm');
if (countEl) countEl.textContent = data.total;
})
.catch(function(e) {
if (searchResult) {
@@ -329,5 +342,8 @@ const VlmUI = {
var countEl = document.getElementById('count-vlm');
if (countEl) countEl.textContent = '-';
// Overpass-Ergebnisse loeschen
if (typeof OverpassLayer !== 'undefined') OverpassLayer.clear();
},
};