Mercurial > gemma
changeset 3501:c5c7cc24fe72
client: spuc12: implemented nash sutcliffe for forcast vs reality accuracy indicator
author | Markus Kottlaender <markus@intevation.de> |
---|---|
date | Tue, 28 May 2019 11:28:38 +0200 |
parents | 5c4f117d8f98 |
children | 45483dd0d801 |
files | client/src/components/map/layers.js client/src/components/map/styles.js client/src/lib/classifications.js client/src/store/gauges.js |
diffstat | 4 files changed, 64 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/client/src/components/map/layers.js Tue May 28 11:25:34 2019 +0200 +++ b/client/src/components/map/layers.js Tue May 28 11:28:38 2019 +0200 @@ -531,7 +531,33 @@ ] }, source, - true + true, + async (f, store) => { + if (f.getId().indexOf("gauges") > -1) { + // look for nashSutcliffeOverview in store. If present and + // not older than 15 min use it or fetch new data and store it. + let data = store.getters["gauges/nashSutcliffeOverview"](f); + if ( + data && + new Date().getTime() - data.createdAt.getTime() < 900000 + ) { + f.set("nsc_data", data.data); + } else { + data = await store.dispatch( + "gauges/loadNashSutcliffeForOverview", + f.get("isrs_code") + ); + if (data) { + store.commit("gauges/addNashSutcliffeOverviewEntry", { + feature: f, + data, + createdAt: new Date() + }); + f.set("nsc_data", data); + } + } + } + } ) ); return new VectorLayer({
--- a/client/src/components/map/styles.js Tue May 28 11:25:34 2019 +0200 +++ b/client/src/components/map/styles.js Tue May 28 11:28:38 2019 +0200 @@ -240,7 +240,7 @@ // TODO: Get information from feature and check the ranges according to #423, #424, #425 let colorWaterlevel = classifications.gmAvailability(feature); let colorUniformTriangle = "lime"; - let colorComparison = "white"; + let colorComparison = classifications.forecastVsReality(feature); let colorAccuracy = classifications.forecastAccuracy(feature); let maps = store.state.map.openLayersMaps; let geom = feature.getGeometry();
--- a/client/src/lib/classifications.js Tue May 28 11:25:34 2019 +0200 +++ b/client/src/lib/classifications.js Tue May 28 11:28:38 2019 +0200 @@ -65,5 +65,14 @@ } } return "white"; + }, + forecastVsReality(gauge) { + let nsc = gauge.get("nsc_data"); + if (nsc && nsc.coeffs.reduce((sum, coeff) => sum + coeff.samples, 0)) { + if (nsc.coeffs[0].samples && nsc.coeffs[0].value < -12.5) return "red"; + if (nsc.coeffs[2].samples && nsc.coeffs[2].value < -12.5) return "yellow"; + return "lime"; + } + return "white"; } };
--- a/client/src/store/gauges.js Tue May 28 11:25:34 2019 +0200 +++ b/client/src/store/gauges.js Tue May 28 11:28:38 2019 +0200 @@ -30,6 +30,7 @@ longtermInterval: [], yearWaterlevels: [], nashSutcliffe: null, + nashSutcliffeOverview: [], dateFrom: dateFrom, dateTo: dateTo, yearCompare: new Date().getFullYear() @@ -45,6 +46,11 @@ return state.gauges.find( g => g.properties.isrs_code === state.selectedGaugeISRS ); + }, + nashSutcliffeOverview: state => feature => { + return state.nashSutcliffeOverview.find( + d => d.feature.get("id") === feature.get("id") + ); } }, mutations: { @@ -72,6 +78,14 @@ nashSutcliffe: (state, data) => { state.nashSutcliffe = data; }, + addNashSutcliffeOverviewEntry: (state, data) => { + let existingIndex = state.nashSutcliffeOverview.findIndex( + d => d.feature.get("id") === data.feature.get("id") + ); + if (existingIndex !== -1) + state.nashSutcliffeOverview.splice(existingIndex, 1); + state.nashSutcliffeOverview.push(data); + }, dateFrom: (state, dateFrom) => { state.dateFrom = dateFrom; }, @@ -263,6 +277,19 @@ reject(error); }); }); + }, + loadNashSutcliffeForOverview(context, isrsCode) { + return new Promise((resolve, reject) => { + HTTP.get(`/data/nash-sutcliffe/${isrsCode}`, { + headers: { "X-Gemma-Auth": localStorage.getItem("token") } + }) + .then(response => { + resolve(response.data); + }) + .catch(error => { + reject(error); + }); + }); } } };