/** * Imagery Switcher: Verschiedene Satellitenbilder + historische Aufnahmen. * Unterstuetzt URL-Template (Esri, Sentinel, OSM) und WMTS (NASA GIBS). */ const ImagerySwitch = { _viewer: null, _currentLayer: null, _currentId: 'default', _sources: { 'default': { name: 'Cesium Ion (Standard)' }, 'esri': { name: 'Esri World Imagery', url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', }, 'nasa-modis': { name: 'NASA MODIS Terra (Heute)', gibs: { layer: 'MODIS_Terra_CorrectedReflectance_TrueColor', tileMatrixSet: '250m', ext: 'jpg', time: 'today', maxLevel: 8, }, }, 'nasa-viirs': { name: 'NASA VIIRS SNPP (Heute)', gibs: { layer: 'VIIRS_SNPP_CorrectedReflectance_TrueColor', tileMatrixSet: '250m', ext: 'jpg', time: 'today', maxLevel: 8, }, }, 'nasa-goes-east': { name: 'NASA GOES East (Live)', gibs: { layer: 'GOES-East_ABI_GeoColor', tileMatrixSet: '2km', ext: 'jpg', time: 'today', maxLevel: 5, }, }, 'nasa-goes-west': { name: 'NASA GOES West (Live)', gibs: { layer: 'GOES-West_ABI_GeoColor', tileMatrixSet: '2km', ext: 'jpg', time: 'today', maxLevel: 5, }, }, 's2-2024': { name: 'Sentinel-2 (2024)', url: 'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2024_3857/default/GoogleMapsCompatible/{z}/{x}/{y}.jpg', }, 's2-2023': { name: 'Sentinel-2 (2023)', url: 'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2023_3857/default/GoogleMapsCompatible/{z}/{x}/{y}.jpg', }, 's2-2022': { name: 'Sentinel-2 (2022)', url: 'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2022_3857/default/GoogleMapsCompatible/{z}/{x}/{y}.jpg', }, 's2-2020': { name: 'Sentinel-2 (2020)', url: 'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2020_3857/default/GoogleMapsCompatible/{z}/{x}/{y}.jpg', }, 's2-2018': { name: 'Sentinel-2 (2018)', url: 'https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2018_3857/default/GoogleMapsCompatible/{z}/{x}/{y}.jpg', }, 'topo': { name: 'OpenTopoMap', url: 'https://tile.opentopomap.org/{z}/{x}/{y}.png', }, 'osm': { name: 'OpenStreetMap', url: 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png', }, }, init(viewer) { this._viewer = viewer; }, _buildGibsProvider(g) { var today = new Date().toISOString().slice(0, 10); var time = (g.time === 'today') ? today : g.time; var labels = []; for (var i = 0; i <= g.maxLevel; i++) labels.push(String(i)); // REST-URL (gleicher Ansatz wie nightlights.js -- bewaehrt) var restUrl = 'https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/' + g.layer + '/default/' + time + '/' + g.tileMatrixSet + '/{TileMatrix}/{TileRow}/{TileCol}.' + g.ext; return new Cesium.WebMapTileServiceImageryProvider({ url: restUrl, layer: g.layer, style: 'default', tileMatrixSetID: g.tileMatrixSet, tileMatrixLabels: labels, format: 'image/' + g.ext, tilingScheme: new Cesium.GeographicTilingScheme(), tileWidth: 512, tileHeight: 512, credit: 'NASA GIBS', }); }, switchTo(id) { if (!this._viewer || this._currentId === id) return; var src = this._sources[id]; if (!src) return; // Alten Layer entfernen if (this._currentLayer) { this._viewer.imageryLayers.remove(this._currentLayer); this._currentLayer = null; } if (id === 'default') { // Cesium Ion Default -- nichts hinzufuegen this._currentId = id; } else if (src.gibs) { // NASA GIBS WMTS (REST-URL) this._currentLayer = this._viewer.imageryLayers.addImageryProvider( this._buildGibsProvider(src.gibs) ); this._viewer.imageryLayers.lower(this._currentLayer); this._currentId = id; } else if (src.url) { // URL Template (Esri, Sentinel, OSM) this._currentLayer = this._viewer.imageryLayers.addImageryProvider( new Cesium.UrlTemplateImageryProvider({ url: src.url, maximumLevel: 18, credit: src.name, }) ); this._viewer.imageryLayers.lower(this._currentLayer); this._currentId = id; } var sel = document.getElementById('imagery-select'); if (sel) sel.value = id; var label = document.getElementById('imagery-label'); if (label) label.textContent = src.name; }, };