annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedHeightsUtils.java @ 9573:b9c87bbff6a4

mean bed height -> mean bed LEVEL
author gernotbelger
date Tue, 06 Nov 2018 10:56:22 +0100
parents 8e100593aec3
children
rev   line source
9400
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
2 * Software engineering by
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
5 *
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
9 */
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
10 package org.dive4elements.river.artifacts.sinfo.tkhstate;
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
11
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
12 import java.util.Collection;
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
13 import java.util.TreeSet;
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
14
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
15 import org.apache.commons.lang.ArrayUtils;
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
16 import org.apache.commons.lang.math.DoubleRange;
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
17
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
18 /**
9573
b9c87bbff6a4 mean bed height -> mean bed LEVEL
gernotbelger
parents: 9400
diff changeset
19 * Helper functions for bed level calculations
9400
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
20 */
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
21 public final class BedHeightsUtils {
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
22
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
23 /**
9573
b9c87bbff6a4 mean bed height -> mean bed LEVEL
gernotbelger
parents: 9400
diff changeset
24 * Get a union of all stations in a collection of bed levels
9400
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
25 */
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
26 public static double[] extractStations(final Collection<BedHeightsFinder> bedHeightFinders) {
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
27
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
28 return extractStations(bedHeightFinders, false);
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
29 }
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
30
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
31 /**
9573
b9c87bbff6a4 mean bed height -> mean bed LEVEL
gernotbelger
parents: 9400
diff changeset
32 * Get a union of all stations in a collection of bed levels
9400
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
33 */
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
34 public static double[] extractStations(final Collection<BedHeightsFinder> bedHeightFinders, final boolean minMaxAware) {
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
35
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
36 final Collection<Double> allStations = extractStationCollection(bedHeightFinders, minMaxAware);
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
37 return ArrayUtils.toPrimitive(allStations.toArray(new Double[allStations.size()]));
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
38 }
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
39
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
40 /**
9573
b9c87bbff6a4 mean bed height -> mean bed LEVEL
gernotbelger
parents: 9400
diff changeset
41 * Get a union of all stations in a collection of bed levels
9400
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
42 */
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
43 public static Collection<Double> extractStationCollection(final Collection<BedHeightsFinder> bedHeightFinders, final boolean minMaxAware) {
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
44
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
45 if (!minMaxAware)
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
46 return extractStationCollection(bedHeightFinders);
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
47
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
48 final DoubleRange kmRange = extractMinimumStationRange(bedHeightFinders);
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
49
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
50 final Collection<Double> allStations = new TreeSet<>();
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
51 for (final BedHeightsFinder bhf : bedHeightFinders) {
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
52 for (final Double station : bhf.getStations())
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
53 if ((station.doubleValue() >= kmRange.getMinimumDouble() - 0.0001) && (station.doubleValue() <= kmRange.getMaximumDouble() + 0.0001))
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
54 allStations.add(station.doubleValue());
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
55 }
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
56 return allStations;
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
57 }
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
58
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
59 /**
9573
b9c87bbff6a4 mean bed height -> mean bed LEVEL
gernotbelger
parents: 9400
diff changeset
60 * Get a union of all stations in a collection of bed levels
9400
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
61 */
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
62 public static Collection<Double> extractStationCollection(final Collection<BedHeightsFinder> bedHeights) {
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
63
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
64 final Collection<Double> allStations = new TreeSet<>();
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
65
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
66 for (final BedHeightsFinder bedHeight : bedHeights)
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
67 allStations.addAll(bedHeight.getStations());
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
68
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
69 return allStations;
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
70 }
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
71
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
72 /**
9573
b9c87bbff6a4 mean bed height -> mean bed LEVEL
gernotbelger
parents: 9400
diff changeset
73 * Intersects all km ranges of a collection of bed levels
9400
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
74 */
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
75 public static DoubleRange extractMinimumStationRange(final Collection<BedHeightsFinder> bedHeightFinders) {
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
76 DoubleRange kmRange = null;
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
77 for (final BedHeightsFinder bhf : bedHeightFinders)
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
78 kmRange = intersectRanges(kmRange, bhf.getKmRange());
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
79 return new DoubleRange(kmRange.getMinimumDouble() - 0.0001, kmRange.getMaximumDouble() + 0.0001);
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
80 }
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
81
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
82 /**
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
83 * Creates a range with the minimum overlapping of two ranges
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
84 */
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
85 public static DoubleRange intersectRanges(final DoubleRange a, final DoubleRange b) {
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
86 if (a == null)
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
87 return new DoubleRange(b.getMinimumDouble(), b.getMaximumDouble());
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
88 if (b == null)
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
89 return new DoubleRange(a.getMinimumDouble(), a.getMaximumDouble());
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
90 return new DoubleRange(Math.max(a.getMinimumDouble(), b.getMinimumDouble()), Math.min(a.getMaximumDouble(), b.getMaximumDouble()));
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
91 }
8e100593aec3 Missing class added
mschaefer
parents:
diff changeset
92 }

http://dive4elements.wald.intevation.org