annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java @ 9443:515643b2c49a

Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
author mschaefer
date Mon, 20 Aug 2018 18:50:33 +0200
parents e8b1255fc89e
children e44c1a8b0c54
rev   line source
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
2 * Software engineering by
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
5 *
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
9 */
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
10 package org.dive4elements.river.artifacts.uinfo.salix;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
11
9375
a0a2e68a1e11 Fixed: cm rounding in S-Info flow depth/tkh and U-Info salix via BigDecimal, half_even mode
mschaefer
parents: 9368
diff changeset
12 import java.math.BigDecimal;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
13 import java.util.ArrayList;
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
14 import java.util.Collection;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
15 import java.util.HashMap;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
16 import java.util.List;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
17 import java.util.Map;
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
18 import java.util.Map.Entry;
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
19 import java.util.NavigableMap;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
20
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
21 import org.dive4elements.river.artifacts.WINFOArtifact;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
22 import org.dive4elements.river.artifacts.access.ComputationRangeAccess;
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
23 import org.dive4elements.river.artifacts.common.AbstractResultType;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
24 import org.dive4elements.river.artifacts.common.GeneralResultType;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
25 import org.dive4elements.river.artifacts.common.ResultRow;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
26 import org.dive4elements.river.artifacts.model.Calculation;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
27 import org.dive4elements.river.artifacts.model.WstValueTable;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
28 import org.dive4elements.river.artifacts.model.WstValueTable.QPosition;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
29 import org.dive4elements.river.artifacts.model.WstValueTableFactory;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
30 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
31 import org.dive4elements.river.artifacts.sinfo.tkhstate.WinfoArtifactWrapper;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
32 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
9328
b3d3c958a594 Renamed package name
gernotbelger
parents: 9321
diff changeset
33 import org.dive4elements.river.artifacts.uinfo.common.UInfoResultType;
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
34 import org.dive4elements.river.artifacts.uinfo.salix.SalixLineAccess.ScenarioType;
9443
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
35 import org.dive4elements.river.artifacts.uinfo.vegetationzones.VegetationZoneServerClientXChange;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
36 import org.dive4elements.river.model.Gauge;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
37 import org.dive4elements.river.model.MainValue;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
38 import org.dive4elements.river.model.MainValueType.MainValueTypeKey;
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
39 import org.dive4elements.river.utils.Formatter;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
40
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
41 /**
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
42 * Calculation of the result rows of the u-info salix line calc mode
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
43 *
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
44 * @author Matthias Schäfer
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
45 */
9321
a978b601a034 Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents: 9316
diff changeset
46 final class SalixLineCalculator {
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
47
9375
a0a2e68a1e11 Fixed: cm rounding in S-Info flow depth/tkh and U-Info salix via BigDecimal, half_even mode
mschaefer
parents: 9368
diff changeset
48 private static final BigDecimal SALIX_DISTANCE = new BigDecimal("2.31");
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
49 private final List<ResultRow> rows = new ArrayList<>();
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
50
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
51 private final RiverInfoProvider riverInfoProvider;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
52
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
53 private final Map<Gauge, QPosition> gaugeMwPos;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
54 private final Map<Gauge, QPosition> gaugeMnwPos;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
55 private final Map<Gauge, QPosition> gaugeMhwPos;
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
56 private final Map<Gauge, QPosition> gaugeHw5Pos;
9368
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
57 private QPosition refGaugeMwPos;
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
58 private QPosition refGaugeMnwPos;
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
59 private QPosition refGaugeMhwPos;
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
60 private QPosition refGaugeHw5Pos;
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
61 private Gauge firstGauge;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
62
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
63 private Calculation problems;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
64
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
65 private WstValueTable wst;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
66
9321
a978b601a034 Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents: 9316
diff changeset
67 public SalixLineCalculator(final RiverInfoProvider riverInfoProvider) {
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
68 this.riverInfoProvider = riverInfoProvider;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
69 this.gaugeMwPos = new HashMap<>();
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
70 this.gaugeMnwPos = new HashMap<>();
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
71 this.gaugeMhwPos = new HashMap<>();
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
72 this.gaugeHw5Pos = new HashMap<>();
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
73 }
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
74
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
75 /**
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
76 * Calculate the salix line result rows
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
77 */
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
78 public void execute(final Calculation problems, final UINFOArtifact uinfo, final NavigableMap<Double, List<Double>> rangeScenarios,
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
79 final ScenarioType scenarioType, final String[] scenarioLabels, final String rangeString, final String additionalString,
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
80 final SalixLineCalculationResults results) {
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
81
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
82 this.problems = problems;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
83 this.wst = WstValueTableFactory.getTable(this.riverInfoProvider.getRiver());
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
84
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
85 fetchGaugeMainValuePositions();
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
86
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
87 final WINFOArtifact winfo = new WinfoArtifactWrapper(uinfo);
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
88 winfo.addStringData("ld_mode", "distance");
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
89 winfo.addStringData("ld_step", "100");
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
90 for (final double station : new ComputationRangeAccess(winfo).getKms()) {
9321
a978b601a034 Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents: 9316
diff changeset
91 this.rows.add(createRow(station, rangeScenarios));
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
92 }
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
93 if (scenarioType == ScenarioType.REGIONAL)
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
94 results.addResult(new SalixLineCalculationRegionalResult("Salix-regional", scenarioLabels, rangeString, additionalString, this.rows), problems);
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
95 else if (scenarioType == ScenarioType.SUPRAREGIONAL)
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
96 results.addResult(new SalixLineCalculationSupraRegionalResult("Salix-supra", scenarioLabels, rangeString, additionalString, this.rows), problems);
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
97 else if (scenarioType == ScenarioType.HISTORICAL)
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
98 results.addResult(new SalixLineCalculationHistoricalResult("Salix-hist", scenarioLabels, rangeString, additionalString, this.rows), problems);
9309
9a9f076d5716 Work on U-Info salix line calculation
mschaefer
parents: 9295
diff changeset
99 else
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
100 results.addResult(new SalixLineCalculationResult("Salix-simple", this.rows), problems);
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
101 }
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
102
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
103 /**
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
104 * Fetch MQ, MNQ and MHQ of all gauges and determine the wst QPosition for each one
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
105 */
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
106 private void fetchGaugeMainValuePositions() {
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
107 this.gaugeMwPos.clear();
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
108 this.gaugeMnwPos.clear();
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
109 this.gaugeMhwPos.clear();
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
110 this.gaugeHw5Pos.clear();
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
111
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
112 this.firstGauge = null;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
113 for (final Gauge gauge : this.riverInfoProvider.getGauges()) {
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
114 this.gaugeMwPos.put(gauge, null);
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
115 this.gaugeMnwPos.put(gauge, null);
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
116 this.gaugeMhwPos.put(gauge, null);
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
117 this.gaugeHw5Pos.put(gauge, null);
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
118 final double gaugeKm = gauge.getStation().doubleValue();
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
119 for (final MainValue mv : MainValue.getValuesOfGaugeAndType(gauge, MainValueTypeKey.Q)) {
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
120 if (mv.getMainValue().getName().equalsIgnoreCase("mq"))
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
121 this.gaugeMwPos.put(gauge, this.wst.getQPosition(gaugeKm, mv.getValue().doubleValue()));
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
122 else if (mv.getMainValue().getName().equalsIgnoreCase("mnq"))
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
123 this.gaugeMnwPos.put(gauge, this.wst.getQPosition(gaugeKm, mv.getValue().doubleValue()));
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
124 else if (mv.getMainValue().getName().equalsIgnoreCase("mhq"))
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
125 this.gaugeMhwPos.put(gauge, this.wst.getQPosition(gaugeKm, mv.getValue().doubleValue()));
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
126 else if (mv.getMainValue().getName().equalsIgnoreCase("hq5"))
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
127 this.gaugeHw5Pos.put(gauge, this.wst.getQPosition(gaugeKm, mv.getValue().doubleValue()));
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
128 }
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
129 if (this.firstGauge == null) {
9368
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
130 this.refGaugeMwPos = this.gaugeMwPos.get(gauge);
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
131 this.refGaugeMnwPos = this.gaugeMnwPos.get(gauge);
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
132 this.refGaugeMhwPos = this.gaugeMhwPos.get(gauge);
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
133 this.refGaugeHw5Pos = this.gaugeHw5Pos.get(gauge);
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
134 this.firstGauge = gauge;
9368
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
135 }
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
136 }
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
137 if (this.refGaugeMwPos == null)
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
138 this.problems.addProblem("uinfo_salix_calc.warning.missing_mq");
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
139 else {
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
140 if (this.refGaugeMhwPos == null)
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
141 this.problems.addProblem("uinfo_salix_calc.warning.missing_mhq");
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
142 if (this.refGaugeMnwPos == null)
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
143 this.problems.addProblem("uinfo_salix_calc.warning.missing_mnq");
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
144 }
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
145 }
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
146
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
147 /**
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
148 * Create a result row for a station and its gauge, and add w-q-values as selected
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
149 */
9321
a978b601a034 Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents: 9316
diff changeset
150 private ResultRow createRow(final double station, final NavigableMap<Double, List<Double>> rangeScenarios) {
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
151
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
152 final ResultRow row = ResultRow.create();
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
153 row.putValue(GeneralResultType.station, station);
9394
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
154 // Find station's gauge (obsolete version which calculates gauge-wise)
9368
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
155 // final Gauge gauge = this.riverInfoProvider.getGauge(station, true);
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
156 // Interpolate mnw, mw, and mhw
9368
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
157 // final double mnw = interpolateW(station, this.gaugeMnwPos.get(gauge));
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
158 // final double mw = interpolateW(station, this.gaugeMwPos.get(gauge));
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
159 // final double mhw = interpolateW(station, this.gaugeMhwPos.get(gauge));
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
160 final double mnw = interpolateW(station, this.refGaugeMnwPos);
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
161 final double mw = interpolateW(station, this.refGaugeMwPos);
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9361
diff changeset
162 final double mhw = interpolateW(station, this.refGaugeMhwPos);
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
163 final double hw5 = interpolateW(station, this.refGaugeHw5Pos);
9429
bd5f5d2220fa Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents: 9397
diff changeset
164 row.putValue(UInfoResultType.waterlevelMNW, mnw);
bd5f5d2220fa Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents: 9397
diff changeset
165 row.putValue(UInfoResultType.waterlevelMW, mw);
bd5f5d2220fa Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents: 9397
diff changeset
166 row.putValue(UInfoResultType.waterlevelMHW, mhw);
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
167 row.putValue(UInfoResultType.waterlevelMH5, hw5);
9429
bd5f5d2220fa Work on salix cross sections; waterlevels work now with different colors
gernotbelger
parents: 9397
diff changeset
168
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
169 // Calc salix-line and mw-mnw
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
170 row.putValue(UInfoResultType.salixline, calcSalix(mhw, mw));
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
171 row.putValue(UInfoResultType.salix_mw_mnw, calcMwmnw(mw, mnw));
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
172 row.putValue(UInfoResultType.salixw, mhw - SALIX_DISTANCE.doubleValue());
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
173 // Calc scenario values (always all scenario types set, Result variant extracts the fields needed)
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
174 final List<SalixScenario> scenarios = new ArrayList<>();
9394
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
175 final List<Double> deltaws = getDeltaWs(station, rangeScenarios);
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
176 for (final Double deltaw : deltaws) {
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
177 if (deltaw != null) {
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
178 final double salix = calcSalix(mhw, mw + deltaw);
9430
e8b1255fc89e Added calculation of salix hw5 and salix line w
mschaefer
parents: 9429
diff changeset
179 scenarios.add(new SalixScenario((int) (deltaw * 100), salix, mhw + deltaw - SALIX_DISTANCE.doubleValue()));
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
180 }
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
181 else {
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
182 scenarios.add(null);
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
183 }
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
184 }
9361
2aec052d4088 Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
mschaefer
parents: 9328
diff changeset
185 row.putValue(UInfoResultType.customMultiRowColSalixScenarios, scenarios);
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
186 row.putValue(GeneralResultType.gaugeLabel, this.riverInfoProvider.findGauge(station));
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
187 return row;
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
188 }
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
189
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
190 /**
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
191 * Interpolates the W for a station with a fixed (virtual) wst column position
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
192 */
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
193 private double interpolateW(final double station, final QPosition qPosition) {
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
194 if (qPosition != null)
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
195 return this.wst.interpolateW(station, qPosition, this.problems);
9321
a978b601a034 Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents: 9316
diff changeset
196 return Double.NaN;
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
197 }
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
198
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
199 /**
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
200 * Calculates the salix value
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
201 */
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
202 private double calcSalix(final double mhw, final double mw) {
9382
8ae7137b67d7 Fixed: avoiding NaN exception in BigDecimal rounding
mschaefer
parents: 9375
diff changeset
203 if (Double.isNaN(mw) || Double.isInfinite(mw) || Double.isNaN(mhw) || Double.isInfinite(mhw))
8ae7137b67d7 Fixed: avoiding NaN exception in BigDecimal rounding
mschaefer
parents: 9375
diff changeset
204 return mw; // preserving NaN or Infinity
9375
a0a2e68a1e11 Fixed: cm rounding in S-Info flow depth/tkh and U-Info salix via BigDecimal, half_even mode
mschaefer
parents: 9368
diff changeset
205 return Formatter.roundW(mhw).subtract(SALIX_DISTANCE).subtract(Formatter.roundW(mw)).doubleValue();
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
206 }
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
207
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
208 /**
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
209 * Calculates the inverse MW-MNW difference
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
210 */
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
211 private double calcMwmnw(final double mw, final double mnw) {
9382
8ae7137b67d7 Fixed: avoiding NaN exception in BigDecimal rounding
mschaefer
parents: 9375
diff changeset
212 if (Double.isNaN(mw) || Double.isInfinite(mw) || Double.isNaN(mnw) || Double.isInfinite(mnw))
8ae7137b67d7 Fixed: avoiding NaN exception in BigDecimal rounding
mschaefer
parents: 9375
diff changeset
213 return mnw - mw; // preserving NaN or Inifinity
9375
a0a2e68a1e11 Fixed: cm rounding in S-Info flow depth/tkh and U-Info salix via BigDecimal, half_even mode
mschaefer
parents: 9368
diff changeset
214 return Formatter.roundW(mnw).subtract(Formatter.roundW(mw)).doubleValue();
9295
385b52ccde23 Work on U-Info salix line calculation and chart (no scenario case)
mschaefer
parents:
diff changeset
215 }
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
216
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
217 /**
9394
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
218 * Gets the station-specific list of delta-ws of the active scenario, at least with one null item in any case
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
219 */
9394
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
220 private List<Double> getDeltaWs(final double station, final NavigableMap<Double, List<Double>> rangeScenarios) {
9321
a978b601a034 Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents: 9316
diff changeset
221 final Entry<Double, List<Double>> stationScenarios = rangeScenarios.floorEntry(station);
9394
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
222 if (stationScenarios != null) {
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
223 return stationScenarios.getValue();
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
224 }
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
225 final List<Double> noScen = new ArrayList<>();
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
226 noScen.add(null);
439699ff9b2d Added U-Info iota (prev. salix) calculation for historical scenario
mschaefer
parents: 9382
diff changeset
227 return noScen;
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
228 }
9397
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
229
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
230 /**
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
231 * Find and return a height (iota, w main value) of a station in a previously calculated result
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
232 */
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
233 public double fetchStationHeight(final Calculation problems, final double station, final AbstractResultType resultType,
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
234 final SalixLineCalculationResult result) {
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
235
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
236 // Search the station in the previously calculated result rows
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
237 final ResultRow stationRow = searchStation(station, result.getRows());
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
238 if (stationRow != null)
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
239 return stationRow.getDoubleValue(resultType);
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
240 return Double.NaN;
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
241 }
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
242
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
243 /**
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
244 * Searches the row of a station in a result rows collection
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
245 */
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
246 private ResultRow searchStation(final double station, final Collection<ResultRow> rows) {
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
247 for (final ResultRow row : rows) {
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
248 if (row.getDoubleValue(GeneralResultType.station) > station + 0.0001)
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
249 return row;
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
250 }
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
251 return null;
6e7094368e97 Added gauge name column for uinfo iota
mschaefer
parents: 9394
diff changeset
252 }
9443
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
253
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
254 /**
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
255 * Computes the height of a vegetation zone limit for a station and a previously computed salix line result
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
256 */
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
257 public double computeVegetationZoneHeight(final Calculation problems, final double station, final int vegetationZoneType,
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
258 final SalixLineCalculationResult result) {
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
259
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
260 // Search the station in the previously calculated result rows
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
261 final ResultRow stationRow = searchStation(station, result.getRows());
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
262 if (stationRow == null)
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
263 return Double.NaN;
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
264 // Compute height from overflow duration days
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
265 final List<VegetationZoneServerClientXChange> vzs = VegetationZoneServerClientXChange.getStandardList(null, null); // TODO river, context
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
266 if ((vegetationZoneType >= 1) && (vegetationZoneType <= vzs.size())) {
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
267 final int uefd = vzs.get(vegetationZoneType - 1).getMin_day_overflow();
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
268 // Üfd = -70,559 ∗ ln((DGM - MW) + 0,5) + 80,711
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
269 final double f1 = -70.559;
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
270 final double f2 = -88.711;
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
271 final double mw = stationRow.getDoubleValue(UInfoResultType.waterlevelMW);
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
272 final double dgm = Math.exp((uefd - f2) / f1) + mw - 0.5;
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
273 return dgm;
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
274 }
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
275 return Double.NaN;
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
276 }
515643b2c49a Added computation of uinfo salix line vegetation zone height (not yet connected to the cross section facet)
mschaefer
parents: 9430
diff changeset
277 }

http://dive4elements.wald.intevation.org