# HG changeset patch # User mschaefer # Date 1534750867 -7200 # Node ID e8b1255fc89e3601e17e70bd333d6496a5356951 # Parent bd5f5d2220fab42e3a50b75a0830f38ce37bc87f Added calculation of salix hw5 and salix line w diff -r bd5f5d2220fa -r e8b1255fc89e artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java --- 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: diff -r bd5f5d2220fa -r e8b1255fc89e artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java --- 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 gaugeMwPos; private final Map gaugeMnwPos; private final Map gaugeMhwPos; + private final Map 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 scenarios = new ArrayList<>(); final List 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); diff -r bd5f5d2220fa -r e8b1255fc89e artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCrossSectionIndexData.java --- 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; diff -r bd5f5d2220fa -r e8b1255fc89e artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixScenario.java --- 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"; }