Add data_visualization/js/api.js
This commit is contained in:
parent
5f6835cfcc
commit
c4394be145
1 changed files with 79 additions and 0 deletions
79
data_visualization/js/api.js
Normal file
79
data_visualization/js/api.js
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
/**
|
||||
* Modul: Daten-Layer für akustische und Sensordaten der Donau
|
||||
* Rolle: Laden und Aufbereiten der JSON-Datenquellen für Visualisierung
|
||||
* © 2026 Donau2Space.de
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} VisualizationData
|
||||
* @property {Array<Object>} waterLevels - Zeitverlauf der Wasserstandsdaten
|
||||
* @property {Array<Object>} vibrationData - Schwingungsdaten der Umgebung
|
||||
* @property {Array<Object>} frequencyAnalysis - Ergebnisse der Frequenzanalyse
|
||||
* @property {Array<Object>} aiPatterns - KI-Musteranalysen mit Wahrscheinlichkeiten
|
||||
*/
|
||||
|
||||
/**
|
||||
* Lädt Sensordaten aus einer lokalen JSON-Datei oder optional aus einem konfigurierten API-Endpunkt.
|
||||
* @param {Object} [filters={}] - Optionaler Filterparameter (z. B. Datumsbereich, Messparameter)
|
||||
* @returns {Promise<VisualizationData>} Aufbereitete Daten für Chart.js und andere Visualisierungen
|
||||
*/
|
||||
export async function fetchData(filters = {}) {
|
||||
const localPath = './data/measurements.json';
|
||||
// Falls eine API vorhanden wäre, könnte hier dynamisch zwischen API und lokaler Quelle unterschieden werden.
|
||||
|
||||
try {
|
||||
const response = await fetch(localPath, { cache: 'no-cache' });
|
||||
if (!response.ok) {
|
||||
throw new Error(`Fehler beim Laden der Daten: ${response.status}`);
|
||||
}
|
||||
|
||||
const rawData = await response.json();
|
||||
|
||||
// Daten vorsichtig prüfen und filtern
|
||||
const { waterLevels = [], vibrationData = [], frequencyAnalysis = [], aiPatterns = [] } = rawData || {};
|
||||
|
||||
const filteredData = applyFilters({ waterLevels, vibrationData, frequencyAnalysis, aiPatterns }, filters);
|
||||
|
||||
return filteredData;
|
||||
} catch (error) {
|
||||
console.error('fetchData Fehler:', error);
|
||||
return {
|
||||
waterLevels: [],
|
||||
vibrationData: [],
|
||||
frequencyAnalysis: [],
|
||||
aiPatterns: []
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filtert die Daten basierend auf angegebenen Parametern.
|
||||
* @param {VisualizationData} data - Originale Daten aus JSON-Datei
|
||||
* @param {Object} filters - Filterparameter (z. B. { dateFrom, dateTo })
|
||||
* @returns {VisualizationData} Gefilterte Daten
|
||||
*/
|
||||
function applyFilters(data, filters) {
|
||||
const { dateFrom, dateTo, parameter } = filters;
|
||||
|
||||
const withinRange = (entry) => {
|
||||
if (!dateFrom && !dateTo) return true;
|
||||
const t = new Date(entry.timestamp).getTime();
|
||||
const fromValid = dateFrom ? t >= new Date(dateFrom).getTime() : true;
|
||||
const toValid = dateTo ? t <= new Date(dateTo).getTime() : true;
|
||||
return fromValid && toValid;
|
||||
};
|
||||
|
||||
const matchesParameter = (entry) => {
|
||||
if (!parameter) return true;
|
||||
return Object.keys(entry).some((key) => key.toLowerCase() === parameter.toLowerCase());
|
||||
};
|
||||
|
||||
const filterArray = (arr) => Array.isArray(arr) ? arr.filter((entry) => withinRange(entry) && matchesParameter(entry)) : [];
|
||||
|
||||
return {
|
||||
waterLevels: filterArray(data.waterLevels),
|
||||
vibrationData: filterArray(data.vibrationData),
|
||||
frequencyAnalysis: filterArray(data.frequencyAnalysis),
|
||||
aiPatterns: filterArray(data.aiPatterns)
|
||||
};
|
||||
}
|
||||
Loading…
Reference in a new issue