annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionProcessor.java @ 9593:8f4e300b5f79

Punkt 7.1 Vegetationszonen Stripes + Legende ändern
author gernotbelger
date Fri, 11 Jan 2019 17:44:25 +0100
parents 9b8e8fc1f408
children 9b8ba3b83a15
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;
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
21 import org.dive4elements.artifacts.CallMeta;
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
22 import org.dive4elements.artifacts.DataProvider;
9506
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9501
diff changeset
23 import org.dive4elements.river.artifacts.D4EArtifact;
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
24 import org.dive4elements.river.artifacts.access.RiverAccess;
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.artifacts.model.CrossSectionFacetUtils;
9527
7c8d62867876 Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents: 9514
diff changeset
26 import org.dive4elements.river.artifacts.model.river.MainWstValues;
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
27 import org.dive4elements.river.artifacts.resources.Resources;
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
28 import org.dive4elements.river.exports.CrossSectionGenerator;
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 */
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
39 public final class VegetationZonesCrossSectionProcessor {
9499
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
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
43 private static final String FACET_VEGETATION_ZONES_CROSS_SECTION = "uinfo_facet_vegetation_zones_cross_section";
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
44
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
45 private static final String FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION = "uinfo_facet_default_vegetation_zones_cross_section";
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
46
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
47 private static final String DEFAULT_VEGZONES_DESCRIPTION = "uinfo_facet_vegetation_default_zones_cross_section.description";
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
48
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
49 private static final Set<String> HANDLED_FACET_TYPES = new HashSet<>();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
50
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
51 static {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
52 HANDLED_FACET_TYPES.add(FACET_VEGETATION_ZONES_CROSS_SECTION);
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
53 HANDLED_FACET_TYPES.add(FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION);
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
54 }
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
55
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
56 public static final boolean canHandle(final String facettype) {
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
57 return HANDLED_FACET_TYPES.contains(facettype);
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
58 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
59
9506
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9501
diff changeset
60 public static Facet createVegetationZonesCrossSectionFacet(final String description) {
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9501
diff changeset
61
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9501
diff changeset
62 return new VegetationZonesCrossSectionFacet(FACET_VEGETATION_ZONES_CROSS_SECTION, description);
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
63 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
64
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
65 public static Facet createDefaultVegetationZonesCrossSectionFacet(final CallMeta callMeta) {
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
66
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
67 final String description = Resources.getMsg(callMeta, DEFAULT_VEGZONES_DESCRIPTION);
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
68
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
69 return new VegetationZonesCrossSectionFacet(FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION, description);
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
70 }
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
71
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
72 public static void generateSeries(final CrossSectionGenerator generator, final ArtifactAndFacet bundle, final CallContext context,
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
73 final ThemeDocument theme, final boolean visible) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
74
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
75 final DataProvider provider = CrossSectionFacetUtils.getDataProvider(context);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
76 final FastCrossSectionLine crossSection = CrossSectionFacetUtils.getCrossSection(provider, context);
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
77 if (crossSection == null)
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
78 return;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
79 final double currentStation = crossSection.getKm();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
80
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
81 final RiverAccess rAccess = new RiverAccess((D4EArtifact) bundle.getArtifact());
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
82 final River river = rAccess.getRiver();
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
83
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
84 final List<VegetationZoneServerClientXChange> zones = findZonesData(bundle, context, river);
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
85
9556
9b8e8fc1f408 Use facetName in all processors as themeType for legend aggregation.
gernotbelger
parents: 9533
diff changeset
86 final StripedAreaDataset dataset = new StripedAreaDataset(bundle.getFacetName(), theme);
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
87
9593
8f4e300b5f79 Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents: 9556
diff changeset
88 for (int i = 0; i < zones.size(); i++) {
8f4e300b5f79 Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents: 9556
diff changeset
89 final VegetationZoneServerClientXChange zone = zones.get(i);
8f4e300b5f79 Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents: 9556
diff changeset
90 Integer lowerFromTo = zone.getLowerFromTo();
8f4e300b5f79 Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents: 9556
diff changeset
91 if (i == 0) // Hack; turning "-1" invisible
8f4e300b5f79 Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents: 9556
diff changeset
92 lowerFromTo = 0;
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
93
9593
8f4e300b5f79 Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents: 9556
diff changeset
94 final double lower = uefdToHeight(river, currentStation, lowerFromTo);
9527
7c8d62867876 Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents: 9514
diff changeset
95 final double upper = uefdToHeight(river, currentStation, zone.getUpperFromTo());
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
96
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
97 final Color color = Color.decode(zone.getHexColor());
9593
8f4e300b5f79 Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents: 9556
diff changeset
98 final String label = String.format("%s (%dd-%dd)", zone.getZoneName(), lowerFromTo, zone.getUpperFromTo());
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
99 dataset.addStripe(new Stripe(label, color, lower, upper));
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
100 }
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
101
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
102 generator.addAxisDataset(dataset, 0, visible);
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
103 return;
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
104 }
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
105
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
106 private static List<VegetationZoneServerClientXChange> findZonesData(final ArtifactAndFacet bundle, final CallContext context, final River river) {
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
107
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
108 if (bundle.getFacetName().equals(FACET_VEGETATION_ZONES_CROSS_SECTION)) {
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
109
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
110 final Artifact artifact = bundle.getArtifact();
9506
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9501
diff changeset
111 final VegetationzonesAccess vAccess = new VegetationzonesAccess((D4EArtifact) artifact);
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
112 return VegetationZoneServerClientXChange.parse(vAccess.getVegZones());
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
113 }
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
114
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
115 if (bundle.getFacetName().equals(FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION)) {
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
116
9514
ee6508687e3f Added default vegetation zones tzo iota result map.
gernotbelger
parents: 9509
diff changeset
117 return VegetationZoneServerClientXChange.getStandardList(river, context);
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
118 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
119
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
120 throw new UnsupportedOperationException();
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
121 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
122
9527
7c8d62867876 Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents: 9514
diff changeset
123 private static double uefdToHeight(final River river, final double station, final int uefd) {
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
124
9527
7c8d62867876 Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents: 9514
diff changeset
125 final MainWstValues mainWstValues = MainWstValues.forRiver(river);
7c8d62867876 Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents: 9514
diff changeset
126 final double mw = mainWstValues.getW(river, MAIN_VALUE_MQ, station);
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
127
9533
d9fda7af24ca No discharge zone calculation and output for gauges unknown in flys for sinfo collision (Meilenstein 2, 2.2.1)
mschaefer
parents: 9527
diff changeset
128 // Üfd = -70,559 ∗ ln((DGM - MW) + 0,5) + 88,711
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
129 final double f1 = -70.559;
9509
6146358c4842 Fixed: f2 sign corrected in vegetation zone height calculation, vegetation zone limit handling changed in the importer
mschaefer
parents: 9506
diff changeset
130 final double f2 = 88.711;
9499
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
131
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
132 final double dgm = Math.exp((uefd - f2) / f1) + mw - 0.5;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
133 return dgm;
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
134 }
853f2dafc16e VegetationZones in CrossSectionsDiagram
gernotbelger
parents:
diff changeset
135 }

http://dive4elements.wald.intevation.org