annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionProcessor.java @ 9501:cb3dabb77857

legend cs vegizone
author gernotbelger
date Thu, 27 Sep 2018 18:21:21 +0200
parents 853f2dafc16e
children 8b7bf26b8782
rev   line source
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
2 * Software engineering by
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
5 *
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
9 */
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.uinfo.vegetationzones;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
11
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
12 import java.awt.Color;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
13 import java.util.HashSet;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
14 import java.util.List;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
15 import java.util.Set;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
16
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
17 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
18 import org.dive4elements.artifactdatabase.state.Facet;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
19 import org.dive4elements.artifacts.Artifact;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
20 import org.dive4elements.artifacts.CallContext;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
21 import org.dive4elements.artifacts.DataProvider;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
22 import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.artifacts.common.AbstractProcessor;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
24 import org.dive4elements.river.artifacts.model.CrossSectionFacetUtils;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.artifacts.model.river.MainWstValuesCalculator;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
26 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
27 import org.dive4elements.river.exports.CrossSectionGenerator;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
28 import org.dive4elements.river.exports.DiagramGenerator;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
29 import org.dive4elements.river.jfree.StripedAreaDataset;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
30 import org.dive4elements.river.jfree.StripedAreaDataset.Stripe;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
31 import org.dive4elements.river.model.FastCrossSectionLine;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
32 import org.dive4elements.river.model.River;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
33 import org.dive4elements.river.themes.ThemeDocument;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
34
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
35 /**
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
36 * @author Domenico Nardi Tironi
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
37 *
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
38 */
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
39 public class VegetationZonesCrossSectionProcessor extends AbstractProcessor {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
40
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
41 private static final String MAIN_VALUE_MQ = "mq";
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
42
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
43 public static final String FACET_VEGETATION_ZONES_CROSS_SECTION = "uinfo_facet_vegetation_zones_cross_section";
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
44
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
45 private static final String FACET_VEGETATION_ZONES_CROSS_SECTION_DESCRIPTION = "uinfo_facet_vegetation_zones_cross_section.description";
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
46
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
47 private static final Set<String> HANDLED_FACET_TYPES = new HashSet<>();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
48
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
49 static {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
50 HANDLED_FACET_TYPES.add(FACET_VEGETATION_ZONES_CROSS_SECTION);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
51 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
52
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
53 public static Facet createVegetationZonesCrossSectionFacet(final CallContext context, final String hash, final String id,
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
54 final AbstractCalculationResult result, final int index) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
55 return AbstractProcessor.createFacet(context, hash, id, result, index, CrossSectionGenerator.I18N_XAXIS_LABEL, FACET_VEGETATION_ZONES_CROSS_SECTION,
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
56 FACET_VEGETATION_ZONES_CROSS_SECTION_DESCRIPTION);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
57 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
58
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
59 public static void generateSeries(final CrossSectionGenerator generator, final ArtifactAndFacet bundle, final CallContext context,
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
60 final ThemeDocument theme, final boolean visible) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
61
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
62 final DataProvider provider = CrossSectionFacetUtils.getDataProvider(context);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
63 final FastCrossSectionLine crossSection = CrossSectionFacetUtils.getCrossSection(provider, context);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
64 if (crossSection == null)
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
65 return;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
66 final double currentStation = crossSection.getKm();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
67
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
68 if (bundle.getFacetName().equals(FACET_VEGETATION_ZONES_CROSS_SECTION)) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
69
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
70 final StripedAreaDataset dataset = new StripedAreaDataset(theme);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
71
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
72 final Artifact artifact = bundle.getArtifact();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
73 final VegetationzonesAccess vAccess = new VegetationzonesAccess((UINFOArtifact) artifact);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
74 final River river = vAccess.getRiver();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
75 final List<VegetationZoneServerClientXChange> zones = VegetationZoneServerClientXChange.parse(vAccess.getVegZones());
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
76
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
77 for (final VegetationZoneServerClientXChange zone : zones) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
78
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
79 final double lower = uefdToHeight(context, river, currentStation, zone.getLowerFromTo());
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
80 final double upper = uefdToHeight(context, river, currentStation, zone.getUpperFromTo());
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
81
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
82 final Color color = Color.decode(zone.getHexColor());
9501
cb3dabb77857 legend cs vegizone
gernotbelger
parents: 9499
diff changeset
83 final String label = String.format("%s (%dd-%dd)", zone.getZoneName(), zone.getLowerFromTo(), zone.getUpperFromTo());
cb3dabb77857 legend cs vegizone
gernotbelger
parents: 9499
diff changeset
84 dataset.addStripe(new Stripe(label, color, lower, upper));
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
85 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
86
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
87 generator.addAxisDataset(dataset, 0, visible);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
88 return;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
89 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
90
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
91 throw new UnsupportedOperationException();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
92 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
93
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
94 private static double uefdToHeight(final CallContext context, final River river, final double station, final int uefd) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
95
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
96 final MainWstValuesCalculator mainWstValues = MainWstValuesCalculator.forRiver(context, river, null, MAIN_VALUE_MQ);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
97
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
98 final double mw = mainWstValues.interpolateW(station, MAIN_VALUE_MQ);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
99
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
100 // Üfd = -70,559 ∗ ln((DGM - MW) + 0,5) + 80,711
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
101 final double f1 = -70.559;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
102 final double f2 = -88.711;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
103
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
104 final double dgm = Math.exp((uefd - f2) / f1) + mw - 0.5;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
105 return dgm;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
106 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
107
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
108 public VegetationZonesCrossSectionProcessor() {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
109 super(CrossSectionGenerator.I18N_YAXIS_LABEL, HANDLED_FACET_TYPES);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
110
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
111 throw new UnsupportedOperationException();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
112 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
113
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
114 @Override
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
115 protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
116 throw new UnsupportedOperationException();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
117 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
118
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
119 }

http://dive4elements.wald.intevation.org