Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/DifferenceCurveFilterFacet.java @ 8858:a805211690f7 3.2.x
Fix license headers.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Thu, 18 Jan 2018 20:52:41 +0100 |
parents | 421e5cceac84 |
children |
rev | line source |
---|---|
8858 | 1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU AGPL (>=v3) | |
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
6 * documentation coming with Dive4Elements River for details. | |
7 */ | |
8 | |
7791
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
9 package org.dive4elements.river.artifacts.model; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
10 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
11 import org.dive4elements.artifactdatabase.state.Facet; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
12 import org.dive4elements.artifacts.Artifact; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
13 import org.dive4elements.artifacts.CallContext; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
14 import org.dive4elements.river.artifacts.D4EArtifact; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
15 import org.dive4elements.river.artifacts.access.RiverAccess; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
16 import org.dive4elements.river.artifacts.context.RiverContext; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
17 import org.dive4elements.river.artifacts.math.MovingAverage; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
18 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
19 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
20 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
21 public class DifferenceCurveFilterFacet |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
22 extends DifferenceCurveFacet |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
23 { |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
24 public DifferenceCurveFilterFacet() { |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
25 } |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
26 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
27 public DifferenceCurveFilterFacet( |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
28 int index, |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
29 String name, |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
30 String description, |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
31 ComputeType type, |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
32 String stateID, |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
33 String hash |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
34 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
35 ) { |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
36 super(index, name, description, type, stateID, hash); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
37 } |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
38 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
39 /** |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
40 * Get difference curve data. |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
41 * @return a WKms at given index. |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
42 */ |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
43 @Override |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
44 public Object getData(Artifact artifact, CallContext context) { |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
45 WKms result = (WKms)super.getData(artifact, context); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
46 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
47 Double start = (Double)context.getContextValue("startkm"); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
48 Double end = (Double)context.getContextValue("endkm"); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
49 if(start != null && end != null) { |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
50 RiverContext fc = (RiverContext)context.globalContext(); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
51 // Adaptive smoothing, based on zoom factor/diagram extents. |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
52 ZoomScale scales = (ZoomScale)fc.get("zoomscale"); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
53 RiverAccess access = new RiverAccess((D4EArtifact)artifact); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
54 String river = access.getRiverName(); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
55 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
56 double radius = scales.getRadius(river, start, end); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
57 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
58 double[][] oldData = new double[2][result.size()]; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
59 for (int i = 0; i < result.size(); i++) { |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
60 oldData[0][i] = result.getKm(i); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
61 oldData[1][i] = result.getW(i); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
62 } |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
63 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
64 double[][] diffs = MovingAverage.weighted(oldData, radius); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
65 WKmsImpl newData = new WKmsImpl(); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
66 for(int j = 0; j < diffs[0].length; j++) { |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
67 newData.add(diffs[0][j], diffs[1][j]); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
68 } |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
69 return newData; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
70 } |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
71 return result; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
72 } |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
73 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
74 |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
75 /** Copy deeply. */ |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
76 @Override |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
77 public Facet deepCopy() { |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
78 WaterlevelFacet copy = new DifferenceCurveFilterFacet(); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
79 copy.set(this); |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
80 copy.type = type; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
81 copy.stateId = stateId; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
82 copy.hash = hash; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
83 return copy; |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
84 } |
8b95f9c4f341
Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
85 } |