From 2a36331e682ddef38ab7009fd8d3e21f64ce01d2 Mon Sep 17 00:00:00 2001 From: Pithon Kabiro <pithon.kabiro@hft-stuttgart.de> Date: Fri, 24 Sep 2021 13:58:18 +0200 Subject: [PATCH] New functions: test plotting of line charts Plot line charts using daily minimum and monthly maximum values --- public/js/appChart.js | 174 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) diff --git a/public/js/appChart.js b/public/js/appChart.js index 72fdec5..4a49952 100644 --- a/public/js/appChart.js +++ b/public/js/appChart.js @@ -41,6 +41,8 @@ import { } from "./src_modules/aggregateHelpers.mjs"; import { + calculateMinimumObservationValuesWithinInterval, + calculateMaximumObservationValuesWithinInterval, calculateSumOfObservationValuesWithinInterval, calculateAverageOfObservationValuesWithinInterval, } from "./src_modules/aggregate.mjs"; @@ -585,6 +587,176 @@ const drawLineChartDailyAverageTest = async function () { } }; +/** + * Test drawing of line chart using aggregation / minimum result - daily + */ +const drawLineChartDailyMinTest = async function () { + try { + const sensorsOfInterestNestedArr = [ + ["125", "vl", "60min"], + ["225", "vl", "60min"], + ]; + + const observationsPlusMetadata = + await getMetadataPlusObservationsFromSingleOrMultipleDatastreams( + BASE_URL, + QUERY_PARAMS_COMBINED, + sensorsOfInterestNestedArr + ); + + // Extract the observations and metadata for each sensor + // Array elements in same order as input array + const [obsNestedArr, metadataNestedArr] = observationsPlusMetadata; + + // User-specified start date and end date + const startDate = "2020-02-01"; + const endDate = "2020-05-31"; + + // Extract observations within the user-specified start and end date + const observationsNestedArr = obsNestedArr.map((obsArr) => + extractObservationsWithinDatesInterval( + obsArr, + "60min", + startDate, + endDate + ) + ); + + // Unique calendar dates + const uniqueCalendarDatesNestedArr = observationsNestedArr.map( + (observationsArr) => + extractUniqueCalendarDatesFromTimestamp(observationsArr) + ); + + // Calculate average of values of observations - daily + const observationsMinimumDailyNestedArr = + calculateMinimumObservationValuesWithinInterval( + observationsNestedArr, + "60min", + uniqueCalendarDatesNestedArr, + "daily" + ); + + // Format the observations - daily + const formattedObservationsMinimumDailyNestedArr = + observationsMinimumDailyNestedArr.map((obsMinDailyArr, i) => + formatAggregationResultForColumnChart( + uniqueCalendarDatesNestedArr[i], + obsMinDailyArr + ) + ); + + // Format the metadata + const formattedMetadataNestedArr = metadataNestedArr.map((metadataObj) => + formatDatastreamMetadataForChart(metadataObj) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "daily", + "minimum" + ); + + drawLineChartHighcharts( + formattedObservationsMinimumDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } catch (err) { + console.error(err); + } +}; + +/** + * Test drawing of line chart using aggregation / maximum result - daily + */ +const drawLineChartMonthlyMaxTest = async function () { + try { + const sensorsOfInterestNestedArr = [ + ["125", "vl", "60min"], + ["225", "vl", "60min"], + ]; + + const observationsPlusMetadata = + await getMetadataPlusObservationsFromSingleOrMultipleDatastreams( + BASE_URL, + QUERY_PARAMS_COMBINED, + sensorsOfInterestNestedArr + ); + + // Extract the observations and metadata for each sensor + // Array elements in same order as input array + const [obsNestedArr, metadataNestedArr] = observationsPlusMetadata; + + // User-specified start date and end date + const startDate = "2020-02-01"; + const endDate = "2020-12-31"; + + // Extract observations within the user-specified start and end date + const observationsNestedArr = obsNestedArr.map((obsArr) => + extractObservationsWithinDatesInterval( + obsArr, + "60min", + startDate, + endDate + ) + ); + + // Unique calendar dates + const uniqueCalendarDatesNestedArr = observationsNestedArr.map( + (observationsArr) => + extractUniqueCalendarDatesFromTimestamp(observationsArr) + ); + + // Unique calendar months + const uniqueCalendarMonthsNestedArr = uniqueCalendarDatesNestedArr.map( + (uniqueCalendarDatesArr) => + extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) + ); + + // Calculate maximum values of observations - monthly + const observationsMaxMonthlyNestedArr = + calculateMaximumObservationValuesWithinInterval( + observationsNestedArr, + "60min", + uniqueCalendarMonthsNestedArr, + "monthly" + ); + + // Format the observations - monthly + const formattedObservationsMaxMonthlyNestedArr = + observationsMaxMonthlyNestedArr.map((obsMaxMonthlyArr, i) => + formatAggregationResultForColumnChart( + uniqueCalendarMonthsNestedArr[i], + obsMaxMonthlyArr + ) + ); + + // Format the metadata + const formattedMetadataNestedArr = metadataNestedArr.map((metadataObj) => + formatDatastreamMetadataForChart(metadataObj) + ); + + // Extract the formatted metadata properties + const extractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + true, + "monthly", + "maximum" + ); + + drawLineChartHighcharts( + formattedObservationsMaxMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } catch (err) { + console.error(err); + } +}; + // drawScatterPlotHCTest2(); // drawHeatmapHCUsingTempDifference(); // testLineChartMultipleSeries(); @@ -593,3 +765,5 @@ const drawLineChartDailyAverageTest = async function () { // drawColumnChartNonAggregationTest(); // drawLineChartMonthlyAverageTest(); // drawLineChartDailyAverageTest(); +// drawLineChartDailyMinTest(); +// drawLineChartMonthlyMaxTest(); -- GitLab