Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculation.java @ 8891:f431aec10d2c
Implemented access to bed measurements
author | gernotbelger |
---|---|
date | Wed, 14 Feb 2018 19:06:21 +0100 |
parents | cc86b0f9b3c3 |
children | a66f2a7c4f84 89f3c5462a16 |
comparison
equal
deleted
inserted
replaced
8890:90b7f45ff4ae | 8891:f431aec10d2c |
---|---|
8 * documentation coming with Dive4Elements River for details. | 8 * documentation coming with Dive4Elements River for details. |
9 */ | 9 */ |
10 package org.dive4elements.river.artifacts.sinfo.flowdepth; | 10 package org.dive4elements.river.artifacts.sinfo.flowdepth; |
11 | 11 |
12 import java.util.ArrayList; | 12 import java.util.ArrayList; |
13 import java.util.Calendar; | |
13 import java.util.Collection; | 14 import java.util.Collection; |
14 import java.util.Collections; | 15 import java.util.Collections; |
16 import java.util.Date; | |
15 import java.util.List; | 17 import java.util.List; |
16 | 18 |
17 import org.apache.commons.math.FunctionEvaluationException; | 19 import org.apache.commons.math.FunctionEvaluationException; |
18 import org.apache.commons.math.analysis.UnivariateRealFunction; | 20 import org.apache.commons.math.analysis.UnivariateRealFunction; |
19 import org.dive4elements.artifacts.ArtifactDatabase; | 21 import org.dive4elements.artifacts.ArtifactDatabase; |
22 import org.dive4elements.river.artifacts.model.Calculation; | 24 import org.dive4elements.river.artifacts.model.Calculation; |
23 import org.dive4elements.river.artifacts.model.CalculationResult; | 25 import org.dive4elements.river.artifacts.model.CalculationResult; |
24 import org.dive4elements.river.artifacts.model.LocationProvider; | 26 import org.dive4elements.river.artifacts.model.LocationProvider; |
25 import org.dive4elements.river.artifacts.model.QKms; | 27 import org.dive4elements.river.artifacts.model.QKms; |
26 import org.dive4elements.river.artifacts.model.WKms; | 28 import org.dive4elements.river.artifacts.model.WKms; |
29 import org.dive4elements.river.artifacts.model.minfo.QualityMeasurementFactory; | |
30 import org.dive4elements.river.artifacts.model.minfo.QualityMeasurements; | |
27 import org.dive4elements.river.artifacts.resources.Resources; | 31 import org.dive4elements.river.artifacts.resources.Resources; |
28 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact; | 32 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact; |
29 import org.dive4elements.river.artifacts.sinfo.flowdepth.FlowDepthAccess.DifferencesPair; | 33 import org.dive4elements.river.artifacts.sinfo.flowdepth.FlowDepthAccess.DifferencesPair; |
30 import org.dive4elements.river.artifacts.states.WaterlevelData; | 34 import org.dive4elements.river.artifacts.states.WaterlevelData; |
31 import org.dive4elements.river.artifacts.states.WaterlevelFetcher; | 35 import org.dive4elements.river.artifacts.states.WaterlevelFetcher; |
37 import org.dive4elements.river.utils.GaugeIndex; | 41 import org.dive4elements.river.utils.GaugeIndex; |
38 import org.dive4elements.river.utils.RiverUtils; | 42 import org.dive4elements.river.utils.RiverUtils; |
39 | 43 |
40 class FlowDepthCalculation { | 44 class FlowDepthCalculation { |
41 | 45 |
46 private static final int VALID_BED_MEASUREMENT_YEARS = 20; | |
47 | |
42 private static final String CSV_NOT_IN_GAUGE_RANGE = "export.waterlevel.csv.not.in.gauge.range"; | 48 private static final String CSV_NOT_IN_GAUGE_RANGE = "export.waterlevel.csv.not.in.gauge.range"; |
43 | 49 |
44 private final CallContext context; | 50 private final CallContext context; |
45 | 51 |
46 public FlowDepthCalculation(final CallContext context) { | 52 public FlowDepthCalculation(final CallContext context) { |
134 final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.missingQ", null, label); | 140 final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.missingQ", null, label); |
135 problems.addProblem(message); | 141 problems.addProblem(message); |
136 // TODO: keine Berechnung TKH | 142 // TODO: keine Berechnung TKH |
137 } | 143 } |
138 | 144 |
139 // FIXME | 145 final QualityMeasurements bedMeasurements = getBedMeasurements(river, from, to, sounding.getYear()); |
140 // - Sohlbeschaffenheit (D50 Korndurchmesser aus Seddb) | 146 // FIXME: prüfung ob (genug) werte vorhanden sind? was sind genau die kriterien? falls nein, problemhinzufügen und keine |
141 // - Abhängig von Peiljahr | 147 // berechnung tkh |
142 // - kein D50 vorhanden --> Fehler | 148 // FIXME: wie wird ggf. interpoliert? --> absprache? |
143 | 149 // FIXME: mir direkt aufgefallen, die Beispieldatenbank liefert Werte zum gleichen km und zeitpunkt, die messwerte sind |
144 // FIXME | 150 // aber unterschiedlich....??? |
145 // - Art der Gewässersohle (starr/mobil) | 151 // FIXME: die eigentlichen daten extrahieren, ggf. wenn esswerte zum gleichen datum voriliegen. das neueste nehmen? oder |
152 // das näheste zum Peiljahr? | |
153 | |
154 // FIXME Art der Gewässersohle (starr/mobil) | |
155 // FIXME: wie wird ggf. interpoliert? prüfung ob werte vorhanden? | |
146 | 156 |
147 final String bedHeightLabel = bedHeight.getDescription(); | 157 final String bedHeightLabel = bedHeight.getDescription(); |
148 final String wstLabel = wstKms.getName(); | 158 final String wstLabel = wstKms.getName(); |
149 | 159 |
150 final UnivariateRealFunction wstInterpolator = DoubleUtil.getLinearInterpolator(wstKms.allKms(), wstKms.allWs()); | 160 final UnivariateRealFunction wstInterpolator = DoubleUtil.getLinearInterpolator(wstKms.allKms(), wstKms.allWs()); |
240 } | 250 } |
241 | 251 |
242 } | 252 } |
243 | 253 |
244 return resultData; | 254 return resultData; |
255 } | |
256 | |
257 /** | |
258 * Sohlbeschaffenheit (D50 Korndurchmesser aus Seddb) | |
259 * Abhängig von Peiljahr | |
260 */ | |
261 private QualityMeasurements getBedMeasurements(final River river, final double from, final double to, final int soundingYear) { | |
262 | |
263 /* construct valid measurement time range */ | |
264 final Calendar cal = Calendar.getInstance(); | |
265 cal.clear(); | |
266 | |
267 cal.set(soundingYear - VALID_BED_MEASUREMENT_YEARS, 0, 1); | |
268 final Date startTime = cal.getTime(); | |
269 | |
270 cal.set(soundingYear + VALID_BED_MEASUREMENT_YEARS, 11, 31); | |
271 final Date endTime = cal.getTime(); | |
272 | |
273 return QualityMeasurementFactory.getBedMeasurements(river.getName(), from, to, startTime, endTime); | |
245 } | 274 } |
246 | 275 |
247 /** | 276 /** |
248 * Checks the year difference between waterlevels and sounding, and issues a warning if too big. | 277 * Checks the year difference between waterlevels and sounding, and issues a warning if too big. |
249 * | 278 * |