Neue Features: Regenradar, Ortssuche, City-Links, Fadenkreuz
REGENRADAR (RainViewer): - Weltweit Niederschlagsradar als Overlay, kostenlos, kein API-Key - 5min Refresh, 60% Transparenz ORTSSUCHE (Nominatim/OpenStreetMap): - Suchfeld im Header, Ergebnisse als Dropdown - Klick fliegt zur Position - Deutsche Ergebnisse CITY QUICK-LINKS: - 12 strategische Staedte als Schnellnavigation unter dem Header - Berlin, Washington, Moskau, Peking, Tokio, London, Paris, Teheran, Kiew, Jerusalem, Taipei, Hormuz FADENKREUZ + RANGE RINGS: - Zuschaltbar im Panel - Horizontale/vertikale Linie + 3 konzentrische Ringe - Gruener taktischer Stil
Dieser Commit ist enthalten in:
56
static/js/layers/weather.js
Normale Datei
56
static/js/layers/weather.js
Normale Datei
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Wetter-Layer: Regenradar via RainViewer (kostenlos, kein API-Key).
|
||||
*/
|
||||
const WeatherLayer = {
|
||||
_viewer: null,
|
||||
_layer: null,
|
||||
_interval: null,
|
||||
_count: 0,
|
||||
|
||||
start(viewer) {
|
||||
if (this._layer) return;
|
||||
this._viewer = viewer;
|
||||
this._fetchAndShow();
|
||||
var self = this;
|
||||
this._interval = setInterval(function() { self._fetchAndShow(); }, 300000);
|
||||
},
|
||||
|
||||
stop() {
|
||||
if (this._interval) { clearInterval(this._interval); this._interval = null; }
|
||||
if (this._layer && this._viewer) {
|
||||
this._viewer.imageryLayers.remove(this._layer);
|
||||
this._layer = null;
|
||||
}
|
||||
this._count = 0;
|
||||
},
|
||||
|
||||
_fetchAndShow() {
|
||||
var self = this;
|
||||
var statusEl = document.getElementById('status-weather');
|
||||
if (statusEl) { statusEl.textContent = 'Lade Radar...'; statusEl.classList.add('active'); }
|
||||
fetch('https://api.rainviewer.com/public/weather-maps.json')
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(data) {
|
||||
var frames = (data.radar && data.radar.past) || [];
|
||||
if (!frames.length) return;
|
||||
var latest = frames[frames.length - 1];
|
||||
var tileUrl = 'https://tilecache.rainviewer.com' + latest.path + '/256/{z}/{x}/{y}/2/1_1.png';
|
||||
|
||||
if (self._layer && self._viewer) {
|
||||
self._viewer.imageryLayers.remove(self._layer);
|
||||
}
|
||||
self._layer = self._viewer.imageryLayers.addImageryProvider(
|
||||
new Cesium.UrlTemplateImageryProvider({
|
||||
url: tileUrl,
|
||||
maximumLevel: 12,
|
||||
credit: 'RainViewer',
|
||||
})
|
||||
);
|
||||
self._layer.alpha = 0.6;
|
||||
self._count = 1;
|
||||
if (statusEl) statusEl.textContent = 'Regenradar aktiv';
|
||||
})
|
||||
.catch(function(e) { console.warn('Weather:', e); if (statusEl) statusEl.textContent = 'Fehler'; })
|
||||
.finally(function() { setTimeout(function() { if (statusEl) statusEl.classList.remove('active'); }, 5000); });
|
||||
},
|
||||
};
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren