annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFacet.java @ 6341:3ec08ff0f497

Comment.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Fri, 14 Jun 2013 17:08:31 +0200
parents fbe2d4c2b2dd
children b8cd8e2d0c35
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5867
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5867
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
10
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
11 import org.dive4elements.artifactdatabase.state.Facet;
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
12
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
13 import org.dive4elements.artifacts.Artifact;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
14 import org.dive4elements.artifacts.CallContext;
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
15
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5865
diff changeset
16 import org.dive4elements.river.artifacts.D4EArtifact;
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
17
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
18 import org.dive4elements.river.artifacts.model.CalculationResult;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
19 import org.dive4elements.river.artifacts.model.DataFacet;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
20 import org.dive4elements.river.artifacts.model.FacetTypes;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
21
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
22 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
23
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
24 import org.dive4elements.river.model.MeasurementStation;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5778
diff changeset
25
5865
73da40528cf2 River artifacts: Renamed FLYSUtils to RiverUtils.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
26 import org.dive4elements.river.utils.RiverUtils;
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
28 import java.util.ArrayList;
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
29 import java.util.Collections;
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
30 import java.util.List;
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
31 import java.util.Map;
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
32 import java.util.TreeMap;
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
33
5778
4a1bd43e7aa6 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5744
diff changeset
34 import org.apache.log4j.Logger;
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
35
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36
5647
ddb2a4e982b8 Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5645
diff changeset
37 /** Facet to access various sediment loads. */
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 public class SedimentLoadFacet
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 extends DataFacet
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 {
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
41 /** Very own logger. */
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 private static Logger logger = Logger.getLogger(SedimentLoadFacet.class);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43
5647
ddb2a4e982b8 Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5645
diff changeset
44 /** Used as tolerance value when fetching measurement stations. */
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
45 private static double EPSILON = 1e-5;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
46
5647
ddb2a4e982b8 Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5645
diff changeset
47
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 public SedimentLoadFacet() {
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 public SedimentLoadFacet(int idx, String name, String description,
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 ComputeType type, String stateId, String hash) {
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 super(idx, name, description, type, hash, stateId);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 public Object getData(Artifact artifact, CallContext context) {
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 logger.debug("Get data for sediment load at index: " + index);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58
5867
59ff03ff48f1 River artifacts: Renamed FLYSArtifact(Collection) to D4EArtifact(Collection).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5865
diff changeset
59 D4EArtifact flys = (D4EArtifact) artifact;
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 CalculationResult res = (CalculationResult) flys.compute(context, hash,
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 stateId, type, false);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64 Object[] data =
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 (SedimentLoadResult[]) res.getData(); // TODO CAST TO SPECIFIC CLASS
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66
5865
73da40528cf2 River artifacts: Renamed FLYSUtils to RiverUtils.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
67 List<MeasurementStation> allStations = RiverUtils.getRiver(flys).getMeasurementStations();
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
68 SedimentLoadResult result = data != null && data.length > index ? (SedimentLoadResult)data[index] : null;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
69 if (result == null) {
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
70 return null;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
71 }
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
72
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
73 List<Double> sortedStarts = new ArrayList<Double>();
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
74 // Filter stations according to type.
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
75 List<MeasurementStation> stations = new ArrayList<MeasurementStation>();
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
76 for (MeasurementStation station: allStations) {
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
77 if (station.getRange() == null || station.getMeasurementType() == null) {
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
78 continue;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
79 }
5647
ddb2a4e982b8 Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5645
diff changeset
80 if (FacetTypes.IS.SEDIMENT_LOAD_NO_FLOAT(this.getName())
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
81 && station.getMeasurementType().equals("Geschiebe")) {
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
82 stations.add(station);
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
83 sortedStarts.add(station.getStation());
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
84 }
5647
ddb2a4e982b8 Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5645
diff changeset
85 else if (!FacetTypes.IS.SEDIMENT_LOAD_NO_FLOAT(this.getName())
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
86 && station.getMeasurementType().equals("Schwebstoff")) {
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
87 stations.add(station);
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
88 sortedStarts.add(station.getStation());
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
89 }
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
90 }
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
91 Collections.sort(sortedStarts);
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
92
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
93 // Access data according to type.
5648
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
94 double[][] sd = getLoadData(result);
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
95
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
96 // Sort by km.
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
97 TreeMap<Double, Double> sortedKmLoad = new TreeMap<Double,Double>();
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
98
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
99 double[] km = sd[0];
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
100 double[] load = sd[1];
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
101
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
102 for (int i = 0 ; i < km.length; i++) {
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
103 sortedKmLoad.put(km[i], load[i]);
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
104 }
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
105
6341
3ec08ff0f497 Comment.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6340
diff changeset
106 // [0] -> x, [1] -> y
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
107 double[][] values = new double[2][];
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
108 values[0] = new double[km.length*3];
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
109 values[1] = new double[km.length*3];
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
110
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
111 List<double[]> kmWithoutStation = new ArrayList<double[]>();
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
112
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
113 // Find station via its station (km).
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
114 // TODO use a binarySearch instead of linear absdiff approach
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
115 int i = 0;
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
116 for (Map.Entry<Double, Double> kmLoad: sortedKmLoad.entrySet()) {
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
117 boolean matchFound = false;
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
118 // For now, ignore overlaps like (B> next A)
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
119 for (MeasurementStation station: stations) {
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
120 if (Math.abs(station.getStation() - kmLoad.getKey()) < EPSILON ||
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
121 station.getRange().containsTolerant(kmLoad.getKey())) {
5744
5bb179d4fd5f SedimentLoadFacet: Avoid weird steps, find correct measurement stations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5653
diff changeset
122 // TODO: In rare cases, two matches can be found.
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
123 values[0][i*3] = station.getRange().getA().doubleValue() + EPSILON;
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
124 values[1][i*3] = kmLoad.getValue();
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
125 values[0][i*3+1] = station.getRange().getB().doubleValue() - EPSILON;
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
126 values[1][i*3+1] = kmLoad.getValue();
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
127 values[0][i*3+2] = station.getRange().getB().doubleValue();
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
128 values[1][i*3+2] = kmLoad.getValue();
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
129 matchFound = true;
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
130 }
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
131 }
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
132 // Store points without match for later assessment.
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
133 if (!matchFound) {
6340
fbe2d4c2b2dd In prep for 1235: Renamed variables for improved readability.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5994
diff changeset
134 logger.warn("measurement without station ("+kmLoad.getKey()+")!");
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
135 }
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
136 i++;
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
137 }
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
138
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
139 for (int x = 0; x < values[0].length-1; x++) {
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
140 // Introduce gaps where no data in measurement station.
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
141 if (Math.abs(values[0][x+1] - values[0][x]) > 3*EPSILON
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
142 && values[1][x+1] != values[1][x]) {
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
143 values[0][x] = Double.NaN;
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
144 values[1][x] = Double.NaN;
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
145 }
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
146 }
5653
5231e6b849ce issue1077: Handle overlapping measurement station ranges, refactored Generator,
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5648
diff changeset
147
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
148 return values;
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
149 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
150
5645
696d710470f5 flys/issue1077: Show loads as step line, therefore transform data in
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4372
diff changeset
151
5648
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
152 /** Get data according to type of facet. */
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
153 private double[][] getLoadData(SedimentLoadResult result) {
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
154 if (getName().equals(FacetTypes.SEDIMENT_LOAD_SAND))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
155 return result.getSandData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
156 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_COARSE))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
157 return result.getCoarseData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
158 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_FINEMIDDLE))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
159 return result.getFineMiddleData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
160 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_SUSP_SAND))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
161 return result.getSuspSandData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
162 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_SUSP_SAND_BED))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
163 return result.getSuspSandBedData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
164 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_SUSP_SEDIMENT))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
165 return result.getSuspSedimentData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
166 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_TOTAL_LOAD))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
167 return result.getTotalLoadData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
168 else if (getName().equals(FacetTypes.SEDIMENT_LOAD_TOTAL))
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
169 return result.getTotalData();
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
170 else {
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
171 logger.error("SedimentLoadFacet " + getName() + " cannot determine data type.");
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
172 return null;
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
173 }
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
174 }
4feda81c38bc SedimentLoadFacet: Minor refactor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5647
diff changeset
175
4372
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
176 /** Copy deeply. */
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
177 @Override
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
178 public Facet deepCopy() {
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
179 SedimentLoadFacet copy = new SedimentLoadFacet();
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
180 copy.set(this);
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
181 copy.type = type;
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
182 copy.hash = hash;
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
183 copy.stateId = stateId;
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
184 return copy;
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
185 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
186 }
19772b414d46 New facet and result set for sediment load.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
187 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org