Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculation.java @ 8900:d32c22fc686c
Merge
author | mschaefer |
---|---|
date | Thu, 22 Feb 2018 14:11:19 +0100 |
parents | 89f3c5462a16 b6f7961e4cc5 |
children | 0a900d605d52 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculation.java Thu Feb 22 12:07:16 2018 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculation.java Thu Feb 22 14:11:19 2018 +0100 @@ -32,6 +32,9 @@ import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.sinfo.SINFOArtifact; import org.dive4elements.river.artifacts.sinfo.flowdepth.FlowDepthAccess.DifferencesPair; +import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; +import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; +import org.dive4elements.river.artifacts.sinfo.util.WstInfo; import org.dive4elements.river.artifacts.states.WaterlevelData; import org.dive4elements.river.artifacts.states.WaterlevelFetcher; import org.dive4elements.river.model.BedHeight; @@ -68,6 +71,7 @@ /* access input data */ final FlowDepthAccess access = new FlowDepthAccess(sinfo); final River river = access.getRiver(); + final RiverInfo riverInfo = new RiverInfo(river); final Collection<DifferencesPair> diffPairs = access.getDifferencePairs(); @@ -85,7 +89,7 @@ final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name()); - final FlowDepthCalculationResults results = new FlowDepthCalculationResults(calcModeLabel, user, river, from, to, useTkh); + final FlowDepthCalculationResults results = new FlowDepthCalculationResults(calcModeLabel, user, riverInfo, calcRange, useTkh); for (final DifferencesPair diffPair : diffPairs) { final FlowDepthCalculationResult result = calculateResult(river, calcRange, diffPair, problems, gaugeIndex, useTkh); @@ -107,6 +111,7 @@ final String wstId = diffPair.getWstId(); final BedHeight bedHeight = loadBedHeight(soundingId); + final BedHeight bedHeight = loadBedHeight(soundingId); if (bedHeight == null) { final String message = Resources.format(this.context.getMeta(), "Failed to access sounding with id '{0}'", soundingId); problems.addProblem(message); @@ -127,7 +132,8 @@ final String label = String.format("%s - %s", wspLabel, soundingLabel); checkYearDifference(label, waterlevel, bedHeight, problems); - checkWaterlevelDiscretisation(wstKms, problems); + checkWaterlevelDiscretisation(wstKms, calcRange, problems); + // TODO: prüfen, ob sohlhöen die calcRange abdecken/überschneiden /* re-determine the reference gauge, in the same way as the WaterlevelArtifact would do it */ final String notinrange = Resources.getMsg(this.context.getMeta(), CSV_NOT_IN_GAUGE_RANGE, CSV_NOT_IN_GAUGE_RANGE); @@ -202,7 +208,9 @@ if (!calcRange.containsDouble(km)) continue; - + if (!calcRange.containsDouble(km)) + continue; + try { // FIXME: check out of range final double wst = wstInterpolator.value(km); @@ -287,7 +295,6 @@ break; } - // REMARK: access the location once only during calculation final String location = LocationProvider.getLocation(river.getName(), km); @@ -356,7 +363,8 @@ final int difference = Math.abs(soundingYear - wstYear); if (difference > maxDifference) { - final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.year_difference", null, label, difference); + final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.year_difference", null, label, wstYear, + soundingYear); problems.addProblem(message); } } @@ -392,18 +400,22 @@ } /* Checks if the discretisation of the waterlevel exceeds 1000m */ - // FIXME: vermutlich sollten wir diesen check auf den gültigkeitsbereich einschränken - private void checkWaterlevelDiscretisation(final WKms wstKms, final Calculation problems) { + + private void checkWaterlevelDiscretisation(final WKms wstKms, final DoubleRange calcRange, final Calculation problems) { + final int size = wstKms.size(); for (int i = 0; i < size - 2; i++) { final double kmPrev = wstKms.getKm(i); final double kmNext = wstKms.getKm(i + 1); - if (Math.abs(kmPrev - kmNext) > 1) { - final String label = wstKms.getName(); + /* only check if we are within the calculation range */ + if (calcRange.overlapsRange(new DoubleRange(kmPrev, kmNext))) { + if (Math.abs(kmPrev - kmNext) > 1) { + final String label = wstKms.getName(); - final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.waterlevel_discretisation", null, label); - problems.addProblem(kmPrev, message); + final String message = Resources.getMsg(this.context.getMeta(), "sinfo_calc_flow_depth.warning.waterlevel_discretisation", null, label); + problems.addProblem(kmPrev, message); + } } } }