annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/DifferenceCurveFilterFacet.java @ 8609:421e5cceac84

(issue1754) Better fix for radius calculation then 8607:2010da0904b7 Checking for that lower < upper is guranteed in radius calculation makes more sense to do centrally in ZoomScale. This also works for the MINFO Filter facets.
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 24 Mar 2015 11:06:47 +0100
parents 2010da0904b7
children a805211690f7
rev   line source
7791
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 package org.dive4elements.river.artifacts.model;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 import org.dive4elements.artifactdatabase.state.Facet;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4 import org.dive4elements.artifacts.Artifact;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 import org.dive4elements.artifacts.CallContext;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 import org.dive4elements.river.artifacts.D4EArtifact;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 import org.dive4elements.river.artifacts.access.RiverAccess;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 import org.dive4elements.river.artifacts.context.RiverContext;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 import org.dive4elements.river.artifacts.math.MovingAverage;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 public class DifferenceCurveFilterFacet
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 extends DifferenceCurveFacet
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16 public DifferenceCurveFilterFacet() {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 public DifferenceCurveFilterFacet(
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 int index,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 String name,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 String description,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 ComputeType type,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 String stateID,
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 String hash
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 ) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 super(index, name, description, type, stateID, hash);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 /**
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 * Get difference curve data.
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 * @return a WKms at given index.
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 @Override
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 public Object getData(Artifact artifact, CallContext context) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 WKms result = (WKms)super.getData(artifact, context);
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 Double start = (Double)context.getContextValue("startkm");
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 Double end = (Double)context.getContextValue("endkm");
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 if(start != null && end != null) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 RiverContext fc = (RiverContext)context.globalContext();
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 // Adaptive smoothing, based on zoom factor/diagram extents.
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 ZoomScale scales = (ZoomScale)fc.get("zoomscale");
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 RiverAccess access = new RiverAccess((D4EArtifact)artifact);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 String river = access.getRiverName();
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 double radius = scales.getRadius(river, start, end);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 double[][] oldData = new double[2][result.size()];
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 for (int i = 0; i < result.size(); i++) {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 oldData[0][i] = result.getKm(i);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 oldData[1][i] = result.getW(i);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 }
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[][] diffs = MovingAverage.weighted(oldData, radius);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 WKmsImpl newData = new WKmsImpl();
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 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
59 newData.add(diffs[0][j], diffs[1][j]);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 return newData;
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 return result;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67 /** Copy deeply. */
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 @Override
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69 public Facet deepCopy() {
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70 WaterlevelFacet copy = new DifferenceCurveFilterFacet();
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71 copy.set(this);
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72 copy.type = type;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 copy.stateId = stateId;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 copy.hash = hash;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 return copy;
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 }
8b95f9c4f341 Added new facet for filtered winfo differences.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77 }

http://dive4elements.wald.intevation.org