Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCrossSectionProcessor.java @ 9661:9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
localized vegetation type names by querying the database instead of translating by resource property,
detecting and cancelling the import of a second vegetation zone file for a river,
detecting, logging, cancelling in case of wrong column titles,
detecting, logging and ignoring lines with missing (color) values,
comparing vegetation zone name and class with the database and logging+ignoring in case of inconsistencies,
starting the most elevated zone with 0 instead of -1 overflow days
author | mschaefer |
---|---|
date | Mon, 23 Mar 2020 16:38:12 +0100 |
parents | 8f4e300b5f79 |
children |
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); |
9661
9b8ba3b83a15
Importer (s/u-info) vegetation zones: new database column in vegetation_type table for german type name,
mschaefer
parents:
9593
diff
changeset
|
90 final Integer lowerFromTo = zone.getLowerFromTo(); |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
91 |
9593
8f4e300b5f79
Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents:
9556
diff
changeset
|
92 final double lower = uefdToHeight(river, currentStation, lowerFromTo); |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
93 final double upper = uefdToHeight(river, currentStation, zone.getUpperFromTo()); |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
94 |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
95 final Color color = Color.decode(zone.getHexColor()); |
9593
8f4e300b5f79
Punkt 7.1 Vegetationszonen Stripes + Legende ändern
gernotbelger
parents:
9556
diff
changeset
|
96 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
|
97 dataset.addStripe(new Stripe(label, color, lower, upper)); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
98 } |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
99 |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
100 generator.addAxisDataset(dataset, 0, visible); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
101 return; |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
102 } |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
103 |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
104 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
|
105 |
9499 | 106 if (bundle.getFacetName().equals(FACET_VEGETATION_ZONES_CROSS_SECTION)) { |
107 | |
108 final Artifact artifact = bundle.getArtifact(); | |
9506
8b7bf26b8782
Predefined artifact for standard vegetation zones.
gernotbelger
parents:
9501
diff
changeset
|
109 final VegetationzonesAccess vAccess = new VegetationzonesAccess((D4EArtifact) artifact); |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
110 return VegetationZoneServerClientXChange.parse(vAccess.getVegZones()); |
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
111 } |
9499 | 112 |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
113 if (bundle.getFacetName().equals(FACET_DEFAULT_VEGETATION_ZONES_CROSS_SECTION)) { |
9499 | 114 |
9514
ee6508687e3f
Added default vegetation zones tzo iota result map.
gernotbelger
parents:
9509
diff
changeset
|
115 return VegetationZoneServerClientXChange.getStandardList(river, context); |
9499 | 116 } |
117 | |
118 throw new UnsupportedOperationException(); | |
119 } | |
120 | |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
121 private static double uefdToHeight(final River river, final double station, final int uefd) { |
9499 | 122 |
9527
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
123 final MainWstValues mainWstValues = MainWstValues.forRiver(river); |
7c8d62867876
Cleanup of MainWstValue code. Cache qPositions once determined.
gernotbelger
parents:
9514
diff
changeset
|
124 final double mw = mainWstValues.getW(river, MAIN_VALUE_MQ, station); |
9499 | 125 |
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
|
126 // Üfd = -70,559 ∗ ln((DGM - MW) + 0,5) + 88,711 |
9499 | 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 } |