Mercurial > dive4elements > river
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 | 1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
2 * Software engineering by | |
3 * Björnsen Beratende Ingenieure GmbH | |
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt | |
5 * | |
6 * This file is Free Software under the GNU AGPL (>=v3) | |
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
8 * documentation coming with Dive4Elements River for details. | |
9 */ | |
10 package org.dive4elements.river.artifacts.uinfo.vegetationzones; | |
11 | |
12 import java.awt.Color; | |
13 import java.util.HashSet; | |
14 import java.util.List; | |
15 import java.util.Set; | |
16 | |
17 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; | |
18 import org.dive4elements.artifactdatabase.state.Facet; | |
19 import org.dive4elements.artifacts.Artifact; | |
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 | 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 | 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 | 28 import org.dive4elements.river.exports.CrossSectionGenerator; |
29 import org.dive4elements.river.jfree.StripedAreaDataset; | |
30 import org.dive4elements.river.jfree.StripedAreaDataset.Stripe; | |
31 import org.dive4elements.river.model.FastCrossSectionLine; | |
32 import org.dive4elements.river.model.River; | |
33 import org.dive4elements.river.themes.ThemeDocument; | |
34 | |
35 /** | |
36 * @author Domenico Nardi Tironi | |
37 * | |
38 */ | |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
39 public final class VegetationZonesCrossSectionProcessor { |
9499 | 40 |
41 private static final String MAIN_VALUE_MQ = "mq"; | |
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 | 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 | 48 |
49 private static final Set<String> HANDLED_FACET_TYPES = new HashSet<>(); | |
50 | |
51 static { | |
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 | 58 } |
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 | 63 } |
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 | 72 public static void generateSeries(final CrossSectionGenerator generator, final ArtifactAndFacet bundle, final CallContext context, |
73 final ThemeDocument theme, final boolean visible) { | |
74 | |
75 final DataProvider provider = CrossSectionFacetUtils.getDataProvider(context); | |
76 final FastCrossSectionLine crossSection = CrossSectionFacetUtils.getCrossSection(provider, context); | |
77 if (crossSection == null) | |
78 return; | |
79 final double currentStation = crossSection.getKm(); | |
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 | 108 if (bundle.getFacetName().equals(FACET_VEGETATION_ZONES_CROSS_SECTION)) { |
109 | |
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 | 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 | 116 |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
117 return VegetationZoneServerClientXChange.getStandardList(river, context); |
9499 | 118 } |
119 | |
120 throw new UnsupportedOperationException(); | |
121 } | |
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 | 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 | 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 | 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 | 131 |
132 final double dgm = Math.exp((uefd - f2) / f1) + mw - 0.5; | |
133 return dgm; | |
134 } | |
135 } |