changeset 9430:e8b1255fc89e

Added calculation of salix hw5 and salix line w
author mschaefer
date Mon, 20 Aug 2018 09:41:07 +0200
parents bd5f5d2220fa
children eeea16ea0980
files artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixScenario.java
diffstat 4 files changed, 33 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java	Fri Aug 17 17:48:01 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java	Mon Aug 20 09:41:07 2018 +0200
@@ -187,9 +187,7 @@
         if (row == null)
             return Double.NaN;
 
-        // FIXME: hier wird die geodätische Höhe der SalixLinie benötigt; am besten auch schon in die Ergebnistzeilen einbauen
-        return 84.0;
-        // return row.getDoubleValue(UInfoResultType.salixline);
+        return row.getDoubleValue(UInfoResultType.salixw);
     }
 
     public final double getSalixScenarioValue(final double currentKm, final double nextKm, final double prevKm, final int scenarioIndex) {
@@ -202,9 +200,7 @@
         if (salixScenario == null)
             return Double.NaN;
 
-        // FIXME: hier wird die geodätische Höhe der SalixLinie benötigt; ggf schon als weiteres Feld an SalixScenario dranbauen
-        return 89;
-        // return salixScenario.getSalixValue();
+        return salixScenario.getSalixW();
     }
 
     public final double getWaterlevelValue(final double currentKm, final double nextKm, final double prevKm, final SalixWaterlevel waterlevel) {
@@ -220,7 +216,7 @@
             return row.getDoubleValue(UInfoResultType.waterlevelMW);
         case mhw:
             return row.getDoubleValue(UInfoResultType.waterlevelMHW);
-        case mh5:
+        case hw5:
             return row.getDoubleValue(UInfoResultType.waterlevelMH5);
 
         default:
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java	Fri Aug 17 17:48:01 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java	Mon Aug 20 09:41:07 2018 +0200
@@ -52,9 +52,11 @@
     private final Map<Gauge, QPosition> gaugeMwPos;
     private final Map<Gauge, QPosition> gaugeMnwPos;
     private final Map<Gauge, QPosition> gaugeMhwPos;
+    private final Map<Gauge, QPosition> gaugeHw5Pos;
     private QPosition refGaugeMwPos;
     private QPosition refGaugeMnwPos;
     private QPosition refGaugeMhwPos;
+    private QPosition refGaugeHw5Pos;
     private Gauge firstGauge;
 
     private Calculation problems;
@@ -66,6 +68,7 @@
         this.gaugeMwPos = new HashMap<>();
         this.gaugeMnwPos = new HashMap<>();
         this.gaugeMhwPos = new HashMap<>();
+        this.gaugeHw5Pos = new HashMap<>();
     }
 
     /**
@@ -103,11 +106,14 @@
         this.gaugeMwPos.clear();
         this.gaugeMnwPos.clear();
         this.gaugeMhwPos.clear();
+        this.gaugeHw5Pos.clear();
+
         this.firstGauge = null;
         for (final Gauge gauge : this.riverInfoProvider.getGauges()) {
             this.gaugeMwPos.put(gauge, null);
             this.gaugeMnwPos.put(gauge, null);
             this.gaugeMhwPos.put(gauge, null);
+            this.gaugeHw5Pos.put(gauge, null);
             final double gaugeKm = gauge.getStation().doubleValue();
             for (final MainValue mv : MainValue.getValuesOfGaugeAndType(gauge, MainValueTypeKey.Q)) {
                 if (mv.getMainValue().getName().equalsIgnoreCase("mq"))
@@ -116,11 +122,14 @@
                     this.gaugeMnwPos.put(gauge, this.wst.getQPosition(gaugeKm, mv.getValue().doubleValue()));
                 else if (mv.getMainValue().getName().equalsIgnoreCase("mhq"))
                     this.gaugeMhwPos.put(gauge, this.wst.getQPosition(gaugeKm, mv.getValue().doubleValue()));
+                else if (mv.getMainValue().getName().equalsIgnoreCase("hq5"))
+                    this.gaugeHw5Pos.put(gauge, this.wst.getQPosition(gaugeKm, mv.getValue().doubleValue()));
             }
             if (this.firstGauge == null) {
                 this.refGaugeMwPos = this.gaugeMwPos.get(gauge);
                 this.refGaugeMnwPos = this.gaugeMnwPos.get(gauge);
                 this.refGaugeMhwPos = this.gaugeMhwPos.get(gauge);
+                this.refGaugeHw5Pos = this.gaugeHw5Pos.get(gauge);
                 this.firstGauge = gauge;
             }
         }
@@ -150,22 +159,23 @@
         final double mnw = interpolateW(station, this.refGaugeMnwPos);
         final double mw = interpolateW(station, this.refGaugeMwPos);
         final double mhw = interpolateW(station, this.refGaugeMhwPos);
+        final double hw5 = interpolateW(station, this.refGaugeHw5Pos);
         row.putValue(UInfoResultType.waterlevelMNW, mnw);
         row.putValue(UInfoResultType.waterlevelMW, mw);
         row.putValue(UInfoResultType.waterlevelMHW, mhw);
-        // TODO: hier noch den W(HQ5)
-        row.putValue(UInfoResultType.waterlevelMH5, Double.NaN);
+        row.putValue(UInfoResultType.waterlevelMH5, hw5);
 
         // Calc salix-line and mw-mnw
         row.putValue(UInfoResultType.salixline, calcSalix(mhw, mw));
         row.putValue(UInfoResultType.salix_mw_mnw, calcMwmnw(mw, mnw));
+        row.putValue(UInfoResultType.salixw, mhw - SALIX_DISTANCE.doubleValue());
         // Calc scenario values (always all scenario types set, Result variant extracts the fields needed)
         final List<SalixScenario> scenarios = new ArrayList<>();
         final List<Double> deltaws = getDeltaWs(station, rangeScenarios);
         for (final Double deltaw : deltaws) {
             if (deltaw != null) {
                 final double salix = calcSalix(mhw, mw + deltaw);
-                scenarios.add(new SalixScenario((int) (deltaw * 100), salix));
+                scenarios.add(new SalixScenario((int) (deltaw * 100), salix, mhw + deltaw - SALIX_DISTANCE.doubleValue()));
             }
             else {
                 scenarios.add(null);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java	Fri Aug 17 17:48:01 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java	Mon Aug 20 09:41:07 2018 +0200
@@ -24,7 +24,7 @@
      * Known waterlevels of the salix computation
      */
     public enum SalixWaterlevel {
-        mnw, mw, mhw, mh5
+        mnw, mw, mhw, hw5
     }
 
     private static final long serialVersionUID = 1L;
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixScenario.java	Fri Aug 17 17:48:01 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixScenario.java	Mon Aug 20 09:41:07 2018 +0200
@@ -24,10 +24,12 @@
 
     private final double salix_value;
     private final int deltaW;
+    private final double salixW;
 
-    public SalixScenario(final int deltaW, final double salix_value) {
+    public SalixScenario(final int deltaW, final double salix_value, final double salixW) {
         this.deltaW = deltaW;
         this.salix_value = salix_value;
+        this.salixW = salixW;
     }
 
     public double getSalixValue() {
@@ -39,8 +41,8 @@
     }
 
     public String getDeltaWFormatted() {
-        if (Double.isNaN(this.deltaW))
-            return StringUtils.EMPTY;
+        // if (Double.isNaN(this.deltaW))
+        // return StringUtils.EMPTY;
 
         return String.valueOf(this.deltaW);
     }
@@ -52,6 +54,17 @@
         return formatter.format(this.salix_value);
     }
 
+    public double getSalixW() {
+        return this.salixW;
+    }
+
+    public String getSalixWFormatted() {
+        if (Double.isNaN(this.salixW))
+            return StringUtils.EMPTY;
+
+        return String.valueOf(this.salixW);
+    }
+
     public static final String getScenarioValueHeader() {
         return "uinfo.export.salix_line.csv.header.scenario";
     }

http://dive4elements.wald.intevation.org