Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionProcessor.java @ 9514:ee6508687e3f
Added default vegetation zones tzo iota result map.
author | gernotbelger |
---|---|
date | Mon, 01 Oct 2018 13:03:42 +0200 |
parents | 6146358c4842 |
children | 7c8d62867876 |
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; |
26 import org.dive4elements.river.artifacts.model.river.MainWstValuesCalculator; | |
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 |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
86 final StripedAreaDataset dataset = new StripedAreaDataset(theme); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
87 |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
88 for (final VegetationZoneServerClientXChange zone : zones) { |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
89 |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
90 final double lower = uefdToHeight(context, river, currentStation, zone.getLowerFromTo()); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
91 final double upper = uefdToHeight(context, river, currentStation, zone.getUpperFromTo()); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
92 |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
93 final Color color = Color.decode(zone.getHexColor()); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
94 final String label = String.format("%s (%dd-%dd)", zone.getZoneName(), zone.getLowerFromTo(), zone.getUpperFromTo()); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
95 dataset.addStripe(new Stripe(label, color, lower, upper)); |
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 |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
98 generator.addAxisDataset(dataset, 0, visible); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
99 return; |
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 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
|
103 |
9499 | 104 if (bundle.getFacetName().equals(FACET_VEGETATION_ZONES_CROSS_SECTION)) { |
105 | |
106 final Artifact artifact = bundle.getArtifact(); | |
9506
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9501
diff
changeset
|
107 final VegetationzonesAccess vAccess = new VegetationzonesAccess((D4EArtifact) artifact); |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
108 return VegetationZoneServerClientXChange.parse(vAccess.getVegZones()); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
109 } |
9499 | 110 |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
111 if (bundle.getFacetName().equals(FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION)) { |
9499 | 112 |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
113 return VegetationZoneServerClientXChange.getStandardList(river, context); |
9499 | 114 } |
115 | |
116 throw new UnsupportedOperationException(); | |
117 } | |
118 | |
119 private static double uefdToHeight(final CallContext context, final River river, final double station, final int uefd) { | |
120 | |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
121 // FIXME: cache me |
9499 | 122 final MainWstValuesCalculator mainWstValues = MainWstValuesCalculator.forRiver(context, river, null, MAIN_VALUE_MQ); |
123 | |
124 final double mw = mainWstValues.interpolateW(station, MAIN_VALUE_MQ); | |
125 | |
126 // Üfd = -70,559 ∗ ln((DGM - MW) + 0,5) + 80,711 | |
127 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
|
128 final double f2 = 88.711; |
9499 | 129 |
130 final double dgm = Math.exp((uefd - f2) / f1) + mw - 0.5; | |
131 return dgm; | |
132 } | |
133 } |