annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffHeightSubFilterFacet.java @ 8098:09725b65955a

Add new and simplyfied SedimentLoadFacet The SedimentLoadFacet is intended to work with the Measurement stations. It uses the same mechanismn to access the Mesurement station values as the calculation does. SedimentLoadLS values need a different facet that will come soon.
author Andre Heinecke <andre.heinecke@intevation.de>
date Fri, 15 Aug 2014 18:27:19 +0200
parents 5fc56103952a
children e4606eae8ea5
rev   line source
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 *
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 */
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import org.apache.log4j.Logger;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 import org.dive4elements.artifactdatabase.state.Facet;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import org.dive4elements.artifacts.Artifact;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 import org.dive4elements.artifacts.CallContext;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16 import org.dive4elements.river.artifacts.D4EArtifact;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17 import org.dive4elements.river.artifacts.access.RiverAccess;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 import org.dive4elements.river.artifacts.context.RiverContext;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 import org.dive4elements.river.artifacts.model.CalculationResult;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 import org.dive4elements.river.artifacts.model.DataFacet;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 import org.dive4elements.river.artifacts.math.MovingAverage;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 import org.dive4elements.river.artifacts.model.ZoomScale;
7997
9f42d161886b Add river elevation model to bed diff chart export.
Raimund Renkert <rrenkert@intevation.de>
parents: 7985
diff changeset
23 import org.dive4elements.river.artifacts.resources.Resources;
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 public class BedDiffHeightSubFilterFacet
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 extends DataFacet
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 private static Logger logger = Logger.getLogger(BedDiffHeightSubFilterFacet.class);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 public BedDiffHeightSubFilterFacet() {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 public BedDiffHeightSubFilterFacet(int idx, String name, String description,
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 ComputeType type, String stateId, String hash) {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 super(idx, name, description, type, hash, stateId);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 this.metaData.put("X", "chart.longitudinal.section.xaxis.label");
8007
5fc56103952a Fixed i18n strings.
Raimund Renkert <rrenkert@intevation.de>
parents: 7998
diff changeset
39 this.metaData.put("Y", "chart.beddifference.yaxis.label.diff");
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 public Object getData(Artifact artifact, CallContext context) {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 logger.debug("Get data for bed density at index: " + index);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 D4EArtifact flys = (D4EArtifact) artifact;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 CalculationResult res = (CalculationResult) flys.compute(context, hash,
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 stateId, type, false);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 BedDiffYearResult[] data =
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 (BedDiffYearResult[]) res.getData(); // TODO CAST TO SPECIFIC CLASS
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 Double start = (Double)context.getContextValue("startkm");
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 Double end = (Double)context.getContextValue("endkm");
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 if(start != null && end != null) {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 RiverContext fc = (RiverContext)context.globalContext();
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 // Adaptive smoothing, based on zoom factor/diagram extents.
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 ZoomScale scales = (ZoomScale)fc.get("zoomscale");
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 RiverAccess access = new RiverAccess((D4EArtifact)artifact);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 String river = access.getRiverName();
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 double radius = scales.getRadius(river, start, end);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 BedDiffYearResult oldData = data[index];
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63 double[][] heights = MovingAverage.weighted(oldData.getHeights2Data(), radius);
7997
9f42d161886b Add river elevation model to bed diff chart export.
Raimund Renkert <rrenkert@intevation.de>
parents: 7985
diff changeset
64 this.metaData.put(
9f42d161886b Add river elevation model to bed diff chart export.
Raimund Renkert <rrenkert@intevation.de>
parents: 7985
diff changeset
65 Resources.getMsg(context.getMeta(),
9f42d161886b Add river elevation model to bed diff chart export.
Raimund Renkert <rrenkert@intevation.de>
parents: 7985
diff changeset
66 "chart.subtitle.radius", new Object[] { radius }), "");
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67 return heights;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69 return null;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72 /** Copy deeply. */
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 @Override
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 public Facet deepCopy() {
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 BedDiffHeightSubFilterFacet copy = new BedDiffHeightSubFilterFacet();
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 copy.set(this);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77 copy.type = type;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78 copy.hash = hash;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79 copy.stateId = stateId;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80 return copy;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
83 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org