[PATCH] Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
Wald Commits
scm-commit at wald.intevation.org
Thu Jul 19 08:07:21 CEST 2018
# HG changeset patch
# User mschaefer
# Date 1531980423 -7200
# Node ID 83ebeb620b5a88d4f17158e470818cb2ffccb438
# Parent ae9dee74e43ee08d997a5aa862f9b5cbf564a7fe
Station specific main value annotations in S-Info flood duration curve, corrected infrastructure flood duration calculation
diff -r ae9dee74e43e -r 83ebeb620b5a artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/DurationWaterlevel.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/DurationWaterlevel.java Wed Jul 18 18:53:15 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/DurationWaterlevel.java Thu Jul 19 08:07:03 2018 +0200
@@ -36,6 +36,10 @@
return this.w;
}
+ public double getDischarge() {
+ return this.q;
+ }
+
public int getFloodDurDaysPerYear() {
return this.floodDurDaysPerYear;
}
diff -r ae9dee74e43e -r 83ebeb620b5a artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java Wed Jul 18 18:53:15 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java Thu Jul 19 08:07:03 2018 +0200
@@ -114,4 +114,26 @@
final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, null);
return calculator.calcInfrastructureAnnotations(problems, station, result);
}
+
+ /**
+ * Calculates the annotations of the W main values of a station
+ */
+ public List<StickyAxisAnnotation> calcMainValueWAnnotations(final double station, final FloodDurationCalculationResult result) {
+
+ final Calculation problems = new Calculation();
+
+ final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, null);
+ return calculator.calcMainValueWAnnotations(problems, station, result);
+ }
+
+ /**
+ * Calculates the annotations of the Q main values of a station
+ */
+ public List<StickyAxisAnnotation> calcMainValueQAnnotations(final double station, final FloodDurationCalculationResult result) {
+
+ final Calculation problems = new Calculation();
+
+ final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, null);
+ return calculator.calcMainValueQAnnotations(problems, station, result);
+ }
}
\ No newline at end of file
diff -r ae9dee74e43e -r 83ebeb620b5a artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResults.java Wed Jul 18 18:53:15 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResults.java Thu Jul 19 08:07:03 2018 +0200
@@ -9,14 +9,9 @@
*/
package org.dive4elements.river.artifacts.sinfo.flood_duration;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.commons.lang.math.DoubleRange;
import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
-import org.dive4elements.river.artifacts.model.WQDay;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.jfree.StickyAxisAnnotation;
/**
* @author Gernot Belger
@@ -27,49 +22,5 @@
public FloodDurationCalculationResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange) {
super(calcModeLabel, user, river, calcRange);
- this.mainValueWAnnotations = new ArrayList<>();
- this.mainValueQAnnotations = new ArrayList<>();
}
-
- private WQDay durationCurve;
-
- public WQDay getDurationCurve() {
- return this.durationCurve;
- }
-
- public void setDurationCurve(final WQDay durationCurve) {
- this.durationCurve = durationCurve;
- }
-
- private final List<StickyAxisAnnotation> mainValueWAnnotations;
-
- public List<StickyAxisAnnotation> getMainValueWAnnotations() {
- return this.mainValueWAnnotations;
- }
-
- private final List<StickyAxisAnnotation> mainValueQAnnotations;
-
- public List<StickyAxisAnnotation> getMainValueQAnnotations() {
- return this.mainValueQAnnotations;
- }
-
- // private StickyAxisAnnotation infrastructureWAnnotation;
- //
- // public StickyAxisAnnotation getInfrastructureWAnnotation() {
- // return this.infrastructureWAnnotation;
- // }
- //
- // public void setInfrastructureWAnnotation(final StickyAxisAnnotation infrastructureWAnnotation) {
- // this.infrastructureWAnnotation = infrastructureWAnnotation;
- // }
- //
- // private StickyAxisAnnotation infrastructureQAnnotation;
- //
- // public StickyAxisAnnotation getInfrastructureQAnnotation() {
- // return this.infrastructureQAnnotation;
- // }
- //
- // public void setInfrastructureQAnnotation(final StickyAxisAnnotation infrastructureQAnnotation) {
- // this.infrastructureQAnnotation = infrastructureQAnnotation;
- // }
}
\ No newline at end of file
diff -r ae9dee74e43e -r 83ebeb620b5a artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java Wed Jul 18 18:53:15 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java Thu Jul 19 08:07:03 2018 +0200
@@ -27,11 +27,13 @@
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.WQDay;
import org.dive4elements.river.artifacts.model.WQKms;
+import org.dive4elements.river.artifacts.model.WstValueTable;
+import org.dive4elements.river.artifacts.model.WstValueTable.QPosition;
+import org.dive4elements.river.artifacts.model.WstValueTableFactory;
import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.artifacts.sinfo.common.GaugeDurationValuesFinder;
import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
-import org.dive4elements.river.artifacts.sinfo.common.WQBaseTableFinder;
import org.dive4elements.river.artifacts.sinfo.flood_duration.RiversideRadioChoice.RiversideChoiceKey;
import org.dive4elements.river.exports.WaterlevelDescriptionBuilder;
import org.dive4elements.river.jfree.StickyAxisAnnotation;
@@ -90,40 +92,52 @@
final double[] stationsSorted = sortStations(allStations.keySet());
// Calculate W and Q for all stations and the selected discharge states
- // TODO Laut Herrn Reiß: Q und D jeweils konstant für jedes Pegel-Intervall, Q-Änderungen (Zuflüsse etc.) aus .wst
- // ignorieren
+ // TODO Geht das schneller, wenn man WstValueTable statt WINFOArtifact.computeWaterlevelData nutzt?
final WQKms[] wqkmsArray = calculateWaterlevels(winfo, stationsSorted, problems);
// Determine discharge state labels of the main values
updateMainValueLabels(wqkmsArray, winfo, problems);
- // Create a finder for Q in the {river}.wst km-w-q table
- final WQBaseTableFinder wqFinder = WQBaseTableFinder.loadValues(this.riverInfoProvider.getRiver(), calcRange.getMinimumDouble(),
- calcRange.getMaximumDouble(), problems);
+ // Load base wst table (river).wst - first run takes long time, then it's cached
+ final WstValueTable wst = WstValueTableFactory.getTable(this.riverInfoProvider.getRiver());
// Calculate the durations and create the result rows
for (int i = 0; i <= stationsSorted.length - 1; i++) {
final Gauge gauge = this.riverInfoProvider.getGauge(stationsSorted[i], true);
final ResultRow row = createRow(stationsSorted[i], gauge, firstGauge, wqkmsArray, durFinders.get(gauge), i);
if (allStations.containsKey(stationsSorted[i]) && (allStations.get(stationsSorted[i]) != null))
- calculateInfrastructure(row, gauge, allStations.get(stationsSorted[i]), wqFinder, durFinders);
+ calculateInfrastructure(row, gauge, allStations.get(stationsSorted[i]), wst, durFinders);
this.rows.add(row);
if (secondBank.containsKey(stationsSorted[i])) {
final ResultRow row2 = ResultRow.create(row);
- calculateInfrastructure(row2, gauge, secondBank.get(stationsSorted[i]), wqFinder, durFinders);
+ calculateInfrastructure(row2, gauge, secondBank.get(stationsSorted[i]), wst, durFinders);
this.rows.add(row2);
}
}
+
+ //// Create a finder for Q in the {river}.wst km-w-q table
+ // final WQBaseTableFinder wqFinder = WQBaseTableFinder.loadValues(this.riverInfoProvider.getRiver(),
+ //// calcRange.getMinimumDouble(),
+ // calcRange.getMaximumDouble(), problems);
+ //
+ //// Calculate the durations and create the result rows
+ // for (int i = 0; i <= stationsSorted.length - 1; i++) {
+ // final Gauge gauge = this.riverInfoProvider.getGauge(stationsSorted[i], true);
+ // final ResultRow row = createRow(stationsSorted[i], gauge, firstGauge, wqkmsArray, durFinders.get(gauge), i);
+ // if (allStations.containsKey(stationsSorted[i]) && (allStations.get(stationsSorted[i]) != null))
+ // calculateInfrastructure(row, gauge, allStations.get(stationsSorted[i]), wqFinder, durFinders);
+ // this.rows.add(row);
+ // if (secondBank.containsKey(stationsSorted[i])) {
+ // final ResultRow row2 = ResultRow.create(row);
+ // calculateInfrastructure(row2, gauge, secondBank.get(stationsSorted[i]), wqFinder, durFinders);
+ // this.rows.add(row2);
+ // }
+ // }
+
final String[] mainValueLabels = new String[wqkmsArray.length];
for (int i = 0; i <= wqkmsArray.length - 1; i++)
mainValueLabels[i] = wqkmsArray[i].getName();
results.addResult(new FloodDurationCalculationResult(label, mainValueLabels, this.rows), problems);
-
- // calcWQDays(problems, stationsSorted[0], AttributeKey.LEFT, winfo, results);
- //
- // calcMainValueAnnotations(problems, 0, AttributeKey.LEFT, wqkmsArray, results);
- //
- // calcInfrastructureAnnotations(problems, this.rows.get(0), wqkmsArray, results);
}
/**
@@ -148,30 +162,63 @@
}
/**
- * Calculate the data for the W and Q main value lines in the duration curve chart and add to result collection
+ * Calculates the data for the Q main value lines in the duration curve chart
*/
- public void calcMainValueAnnotations(final Calculation problems, final int stationIndex, final AttributeKey riverside,
- final WQKms[] wqkmsArray, final FloodDurationCalculationResults results) {
+ public List<StickyAxisAnnotation> calcMainValueQAnnotations(final Calculation problems, final double station, final FloodDurationCalculationResult result) {
- // Same way as in MainValueWFacet and ..QFacet, but special label handling
- final List<StickyAxisAnnotation> ws = new ArrayList<>();
- final List<StickyAxisAnnotation> qs = new ArrayList<>();
- for (int i = 0; i <= wqkmsArray.length - 1; i++) {
- final String qLabel = wqkmsArray[i].getName().startsWith("W=") ? "Q(" + wqkmsArray[i].getName() + ")" : wqkmsArray[i].getName();
- final StickyAxisAnnotation qAnnotation = new StickyAxisAnnotation(qLabel, (float) wqkmsArray[i].getQ(stationIndex), SimpleAxis.Y_AXIS,
+ // Search the station in the previously calculated result rows and terminate if no infrastructure row found
+ double station1 = station;
+ if (Double.isNaN(station)) {
+ for (final ResultRow row : result.getRows()) {
+ station1 = row.getDoubleValue(GeneralResultType.station);
+ break;
+ }
+ }
+ final List<ResultRow> stationRows = searchStation(station1, result.getRows());
+ if (stationRows.isEmpty() || (stationRows.get(0).getValue(SInfoResultType.infrastructuretype) == null)) {
+ return new ArrayList<>();
+ }
+ final ResultRow row = stationRows.get(0);
+ final List<StickyAxisAnnotation> annotations = new ArrayList<>();
+ final List<DurationWaterlevel> wqds = (List<DurationWaterlevel>) row.getValue(SInfoResultType.customMultiRowColWaterlevel);
+ for (final DurationWaterlevel wqd : wqds) {
+ final String label = wqd.getBezeichnung().startsWith("W=") ? "Q(" + wqd.getBezeichnung() + ")" : wqd.getBezeichnung();
+ final StickyAxisAnnotation annotation = new StickyAxisAnnotation(label, (float) wqd.getDischarge(), SimpleAxis.Y_AXIS,
FloodDurationCurveGenerator.YAXIS.Q.idx);
- qs.add(qAnnotation);
- FloodDurationMainValuesQFacet.setHitPoint(results.getDurationCurve(), qAnnotation);
- final String wLabel = !wqkmsArray[i].getName().startsWith("W=") ? "W(" + wqkmsArray[i].getName() + ")" : wqkmsArray[i].getName();
- final StickyAxisAnnotation wAnnotation = new StickyAxisAnnotation(wLabel, (float) wqkmsArray[i].getW(stationIndex), SimpleAxis.Y_AXIS,
+ annotation.setHitPoint(wqd.getFloodDurDaysPerYear());
+ annotations.add(annotation);
+ }
+ return annotations;
+ }
+
+ /**
+ * Calculates the data for the W main value lines in the duration curve chart
+ */
+ public List<StickyAxisAnnotation> calcMainValueWAnnotations(final Calculation problems, final double station, final FloodDurationCalculationResult result) {
+
+ // Search the station in the previously calculated result rows and terminate if no infrastructure row found
+ double station1 = station;
+ if (Double.isNaN(station)) {
+ for (final ResultRow row : result.getRows()) {
+ station1 = row.getDoubleValue(GeneralResultType.station);
+ break;
+ }
+ }
+ final List<ResultRow> stationRows = searchStation(station1, result.getRows());
+ if (stationRows.isEmpty() || (stationRows.get(0).getValue(SInfoResultType.infrastructuretype) == null)) {
+ return new ArrayList<>();
+ }
+ final List<StickyAxisAnnotation> annotations = new ArrayList<>();
+ final ResultRow row = stationRows.get(0);
+ final List<DurationWaterlevel> wqds = (List<DurationWaterlevel>) row.getValue(SInfoResultType.customMultiRowColWaterlevel);
+ for (final DurationWaterlevel wqd : wqds) {
+ final String label = !wqd.getBezeichnung().startsWith("W=") ? "W(" + wqd.getBezeichnung() + ")" : wqd.getBezeichnung();
+ final StickyAxisAnnotation annotation = new StickyAxisAnnotation(label, (float) wqd.getWaterlevel(), SimpleAxis.Y_AXIS,
FloodDurationCurveGenerator.YAXIS.W.idx);
- ws.add(wAnnotation);
- FloodDurationMainValuesWFacet.setHitPoint(results.getDurationCurve(), wAnnotation);
+ annotation.setHitPoint(wqd.getFloodDurDaysPerYear());
+ annotations.add(annotation);
}
- results.getMainValueQAnnotations().clear();
- results.getMainValueQAnnotations().addAll(qs);
- results.getMainValueWAnnotations().clear();
- results.getMainValueWAnnotations().addAll(ws);
+ return annotations;
}
/**
@@ -191,13 +238,13 @@
}
final List<ResultRow> stationRows = searchStation(station1, result.getRows());
if (stationRows.isEmpty() || (stationRows.get(0).getValue(SInfoResultType.infrastructuretype) == null)) {
- return null;
+ return new ArrayList<>();
}
// Same way as in MainValueWFacet and ..QFacet
final List<StickyAxisAnnotation> annotations = new ArrayList<>();
for (final ResultRow row : stationRows) {
- annotations.add(calcWAnnotation(row));
- annotations.add(calcQAnnotation(row));
+ annotations.add(calcInfrastructureWAnnotation(row));
+ annotations.add(calcInfrastructureQAnnotation(row));
}
return annotations;
}
@@ -219,7 +266,7 @@
/**
* Calculates the Q annotation lines of an infrastructure
*/
- private StickyAxisAnnotation calcQAnnotation(final ResultRow row) {
+ private StickyAxisAnnotation calcInfrastructureQAnnotation(final ResultRow row) {
final String label = Resources.getMsg(this.context.getMeta(), "sinfo.chart.flood_duration.curve.infrastructure",
"sinfo.chart.flood_duration.curve.infrastructure",
SInfoResultType.infrastructuretype.exportValue(this.context, row.getValue(SInfoResultType.infrastructuretype))
@@ -233,7 +280,7 @@
/**
* Calculates the W annotation lines of an infrastructure
*/
- private StickyAxisAnnotation calcWAnnotation(final ResultRow row) {
+ private StickyAxisAnnotation calcInfrastructureWAnnotation(final ResultRow row) {
final String label = Resources.getMsg(this.context.getMeta(), "sinfo.chart.flood_duration.curve.infrastructure",
"sinfo.chart.flood_duration.curve.infrastructure",
SInfoResultType.infrastructuretype.exportValue(this.context, row.getValue(SInfoResultType.infrastructuretype))
@@ -378,15 +425,43 @@
return row;
}
+ /// **
+ // * Calculate the result row fields for one infrastructure - gives wrong duration numbers where Q changes within the
+ /// gauge range
+ // */
+ // private void calculateInfrastructure(final ResultRow row, final Gauge gauge, final InfrastructureValue
+ /// infrastructure, final WQBaseTableFinder wqFinder,
+ // final Map<Gauge, GaugeDurationValuesFinder> durFinders) {
+ //
+ // final double q = wqFinder.getDischarge(infrastructure.getStation(), infrastructure.getHeight());
+ // final double qOut = Double.isInfinite(q) ? Double.NaN : q;
+ // final double dur = underflowDaysToOverflowDays(durFinders.get(gauge).getDuration(q));
+ // row.putValue(SInfoResultType.riverside, infrastructure.getAttributeKey());
+ // row.putValue(SInfoResultType.floodDuration, dur);
+ // row.putValue(SInfoResultType.floodDischarge, qOut);
+ // row.putValue(SInfoResultType.infrastructureHeight, infrastructure.getHeight());
+ // row.putValue(SInfoResultType.infrastructuretype, infrastructure.getInfrastructure().getType().getName());
+ // }
+
/**
* Calculate the result row fields for one infrastructure
*/
- private void calculateInfrastructure(final ResultRow row, final Gauge gauge, final InfrastructureValue infrastructure, final WQBaseTableFinder wqFinder,
+ private void calculateInfrastructure(final ResultRow row, final Gauge gauge, final InfrastructureValue infrastructure, final WstValueTable wst,
final Map<Gauge, GaugeDurationValuesFinder> durFinders) {
- final double q = wqFinder.getDischarge(infrastructure.getStation(), infrastructure.getHeight());
+ // Interpolate the infrastructure height in the wst table to get the corresponding Q
+ final Calculation problems = new Calculation();
+ final double[] qs = wst.findQsForW(infrastructure.getStation().doubleValue(), infrastructure.getHeight().doubleValue(), problems);
+ // TODO Fehlerbehandlung (kein Q gefunden)
+ final double q = (qs.length >= 1) ? qs[0] : Double.NaN;
final double qOut = Double.isInfinite(q) ? Double.NaN : q;
- final double dur = underflowDaysToOverflowDays(durFinders.get(gauge).getDuration(q));
+ // Determine the relative column position of the Q
+ final QPosition qPos = wst.getQPosition(infrastructure.getStation().doubleValue(), q);
+ // Get the Q for the found column position for the station of the gauge
+ final double qGauge = wst.getQ(qPos, gauge.getStation().doubleValue());
+ // Interpolate the Q-D-table of the gauge
+ final double dur = underflowDaysToOverflowDays(durFinders.get(gauge).getDuration(qGauge));
+ // Set result row
row.putValue(SInfoResultType.riverside, infrastructure.getAttributeKey());
row.putValue(SInfoResultType.floodDuration, dur);
row.putValue(SInfoResultType.floodDischarge, qOut);
diff -r ae9dee74e43e -r 83ebeb620b5a artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCurveFacet.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCurveFacet.java Wed Jul 18 18:53:15 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCurveFacet.java Thu Jul 19 08:07:03 2018 +0200
@@ -1,5 +1,7 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
*
* This file is Free Software under the GNU AGPL (>=v3)
* and comes with ABSOLUTELY NO WARRANTY! Check out the
@@ -19,7 +21,7 @@
/**
- * Data of a duration curve.
+ * Data of a flood duration curve.
*/
public class FloodDurationCurveFacet extends DefaultFacet {
@@ -27,12 +29,6 @@
private static Logger log = Logger.getLogger(FloodDurationCurveFacet.class);
- // /** Blackboard data provider key for durationcurve (wqday) data. */
- // public static String BB_DURATIONCURVE = "durationcurve";
- //
- // /** Blackboard data provider key for km of durationcurve. */
- // public static String BB_DURATIONCURVE_KM = "durationcurve.km";
-
public FloodDurationCurveFacet() {
}
@@ -51,60 +47,10 @@
final D4EArtifact flys = (D4EArtifact) artifact;
- // TODO: wird das hier noch benötigt?
- // final CalculationResult res = (CalculationResult) flys.compute(context, ComputeType.ADVANCE, false);
- // final FloodDurationCalculationResults data = (FloodDurationCalculationResults) res.getData();
-
final double currentKm = FixChartGenerator.getCurrentKm(context);
return new FloodDurationCalculation(context).calcStationCurve(currentKm, (SINFOArtifact) flys);
}
- // private WQDay getTestData() {
- // final int[] days = new int[366];
- // final double[] ws = new double[366];
- // final double[] qs = new double[366];
- // for (int i = 0; i <= 365; i++) {
- // days[i] = i;
- // final double x = (i - 182.5) / 182.5;
- // ws[i] = 102.0 - (Math.pow(x, 5) + x);
- // qs[i] = 1600.0 - 800 * (Math.pow(x, 9) + x);
- // }
- // return new WQDay(days, ws, qs);
- // }
-
- // @Override
- // public List getStaticDataProviderKeys(final Artifact art) {
- // final List list = new ArrayList();
- // list.add(BB_DURATIONCURVE);
- // list.add(BB_DURATIONCURVE_KM);
- // return list;
- // }
-
-
- // /**
- // * Can provide whatever getData returns and additionally the location.
- // * @param key will respond on BB_DURATIONCURVE +KM
- // * @param param ignored
- // * @param context ignored
- // * @return whatever getData delivers or location.
- // */
- // @Override
- // public Object provideBlackboardData(final Artifact artifact,
- // final Object key,
- // final Object param,
- // final CallContext context
- // ) {
- // if (key.equals(BB_DURATIONCURVE)) {
- // return getData(artifact, context);
- // }
- // else if (key.equals(BB_DURATIONCURVE_KM)) {
- // return ((D4EArtifact)artifact).getDataAsString("ld_locations");
- // }
- // else {
- // return null;
- // }
- // }
-
/** Create a deep copy. */
@Override
@@ -114,4 +60,4 @@
return copy;
}
}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+
diff -r ae9dee74e43e -r 83ebeb620b5a artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationInfrastructureFacet.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationInfrastructureFacet.java Wed Jul 18 18:53:15 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationInfrastructureFacet.java Thu Jul 19 08:07:03 2018 +0200
@@ -10,8 +10,6 @@
package org.dive4elements.river.artifacts.sinfo.flood_duration;
-import static org.dive4elements.river.exports.injector.InjectorConstants.CURRENT_KM;
-
import java.util.List;
import org.apache.log4j.Logger;
@@ -21,6 +19,7 @@
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+import org.dive4elements.river.exports.fixings.FixChartGenerator;
import org.dive4elements.river.jfree.RiverAnnotation;
import org.dive4elements.river.jfree.StickyAxisAnnotation;
@@ -43,12 +42,6 @@
/**
* Returns the data this facet requires.
- *
- * @param artifact the owner artifact.
- * @param context the CallContext (can be used to find out if in
- * navigable fixation-setting, or durationcurve).
- *
- * @return the data.
*/
@Override
public Object getData(final Artifact artifact, final CallContext context) {
@@ -61,40 +54,12 @@
final FloodDurationCalculationResults data = (FloodDurationCalculationResults) res.getData();
- // final List<StickyAxisAnnotation> annotations = new ArrayList<>();
- // annotations.add(data.getInfrastructureWAnnotation());
- // annotations.add(data.getInfrastructureQAnnotation());
-
- final double currentKm = getCurrentKm(context);
+ final double currentKm = FixChartGenerator.getCurrentKm(context);
final List<StickyAxisAnnotation> annotations = new FloodDurationCalculation(context).calcInfrastructureAnnotations(currentKm,
data.getResults().get(this.index));
- if (annotations != null) {
- return new RiverAnnotation(this.description, annotations);
- }
- else
- return null;
- }
- /**
- * Returns the current km from the context.
- * If the context is null or doesn't contain a currentKm
- * then a double value of -1 will be returned.
- *
- * @param context
- * The CallContext instance
- * @return the current km as double
- */
- // FIXME: copied from org.dive4elements.river.artifacts.model.fixings.FixingsFacet
- private double getCurrentKm(final CallContext context) {
- if (context == null)
- return Double.NaN;
-
- final Double dkm = (Double) context.getContextValue(CURRENT_KM);
- if (dkm == null)
- return Double.NaN;
-
- return dkm.doubleValue();
+ return new RiverAnnotation(this.description, annotations);
}
diff -r ae9dee74e43e -r 83ebeb620b5a artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationMainValuesQFacet.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationMainValuesQFacet.java Wed Jul 18 18:53:15 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationMainValuesQFacet.java Thu Jul 19 08:07:03 2018 +0200
@@ -1,5 +1,7 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
*
* This file is Free Software under the GNU AGPL (>=v3)
* and comes with ABSOLUTELY NO WARRANTY! Check out the
@@ -8,14 +10,16 @@
package org.dive4elements.river.artifacts.sinfo.flood_duration;
+import java.util.List;
+
import org.apache.log4j.Logger;
import org.dive4elements.artifactdatabase.state.DefaultFacet;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.model.CalculationResult;
-import org.dive4elements.river.artifacts.model.WQDay;
import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+import org.dive4elements.river.exports.fixings.FixChartGenerator;
import org.dive4elements.river.jfree.RiverAnnotation;
import org.dive4elements.river.jfree.StickyAxisAnnotation;
@@ -35,30 +39,9 @@
this.index = 1;
}
- /**
- * Set the hit-point in Q where a line drawn from the axis would hit the
- * curve in WQDay (if hit).
- * Employ linear interpolation.
- */
- public static void setHitPoint(final WQDay wqday, final StickyAxisAnnotation annotation) {
-
- final float q = annotation.getPos();
- final Double day = wqday.interpolateDayByQ(q);
- if (day != null)
- annotation.setHitPoint(day.floatValue());
- else
- log.debug("StickyAnnotation does not hit wqday curve: " + q);
- }
-
/**
* Returns the data this facet requires.
- *
- * @param artifact the owner artifact.
- * @param context the CallContext (can be used to find out if in
- * navigable fixation-setting, or durationcurve).
- *
- * @return the data.
*/
@Override
public Object getData(final Artifact artifact, final CallContext context) {
@@ -71,7 +54,12 @@
final FloodDurationCalculationResults data = (FloodDurationCalculationResults) res.getData();
- return new RiverAnnotation(this.description, data.getMainValueQAnnotations());
+ final double currentKm = FixChartGenerator.getCurrentKm(context);
+
+ final List<StickyAxisAnnotation> annotations = new FloodDurationCalculation(context).calcMainValueQAnnotations(currentKm,
+ data.getResults().get(0));
+
+ return new RiverAnnotation(this.description, annotations);
}
@@ -86,4 +74,3 @@
return copy;
}
}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r ae9dee74e43e -r 83ebeb620b5a artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationMainValuesWFacet.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationMainValuesWFacet.java Wed Jul 18 18:53:15 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationMainValuesWFacet.java Thu Jul 19 08:07:03 2018 +0200
@@ -1,5 +1,7 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
*
* This file is Free Software under the GNU AGPL (>=v3)
* and comes with ABSOLUTELY NO WARRANTY! Check out the
@@ -8,7 +10,7 @@
package org.dive4elements.river.artifacts.sinfo.flood_duration;
-import static org.dive4elements.river.exports.injector.InjectorConstants.CURRENT_KM;
+import java.util.List;
import org.apache.log4j.Logger;
import org.dive4elements.artifactdatabase.state.DefaultFacet;
@@ -16,8 +18,8 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.model.CalculationResult;
-import org.dive4elements.river.artifacts.model.WQDay;
import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+import org.dive4elements.river.exports.fixings.FixChartGenerator;
import org.dive4elements.river.jfree.RiverAnnotation;
import org.dive4elements.river.jfree.StickyAxisAnnotation;
@@ -36,31 +38,8 @@
this.index = 0;
}
-
- /**
- * Set the hit-point in W where a line drawn from the axis would hit the
- * curve in WQDay (if hit).
- * Employ linear interpolation.
- */
- public static void setHitPoint(final WQDay wqday, final StickyAxisAnnotation annotation) {
-
- final float w = annotation.getPos();
- final Double day = wqday.interpolateDayByW(w);
- if (day != null)
- annotation.setHitPoint(day.floatValue());
- else
- log.debug("StickyAnnotation does not hit wqday curve: " + w);
- }
-
-
/**
* Returns the data this facet provides.
- *
- * @param artifact the owner artifact.
- * @param context the CallContext (can be used to find out if in
- * navigable fixation-setting, or durationcurve).
- *
- * @return the data.
*/
@Override
public Object getData(final Artifact artifact, final CallContext context) {
@@ -73,30 +52,12 @@
final FloodDurationCalculationResults data = (FloodDurationCalculationResults) res.getData();
- final double currentKm = getCurrentKm(context);
+ final double currentKm = FixChartGenerator.getCurrentKm(context);
- return new RiverAnnotation(this.description, data.getMainValueWAnnotations());
- }
+ final List<StickyAxisAnnotation> annotations = new FloodDurationCalculation(context).calcMainValueWAnnotations(currentKm,
+ data.getResults().get(0));
- /**
- * Returns the current km from the context.
- * If the context is null or doesn't contain a currentKm
- * then a double value of -1 will be returned.
- *
- * @param context
- * The CallContext instance
- * @return the current km as double
- */
- // FIXME: copied from org.dive4elements.river.artifacts.model.fixings.FixingsFacet
- private double getCurrentKm(final CallContext context) {
- if (context == null)
- return Double.NaN;
-
- final Double dkm = (Double) context.getContextValue(CURRENT_KM);
- if (dkm == null)
- return Double.NaN;
-
- return dkm.doubleValue();
+ return new RiverAnnotation(this.description, annotations);
}
@@ -111,4 +72,4 @@
return copy;
}
}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+
More information about the Dive4Elements-commits
mailing list