annotate artifacts/src/main/java/org/dive4elements/river/exports/ATWriter.java @ 9801:1d7a72a50183 3.2.x tip

Assume Compose V2, consistently
author Tom Gottfried <tom@intevation.de>
date Thu, 23 Nov 2023 10:14:13 +0100
parents 0a5239a1e46e
children
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
9 package org.dive4elements.river.exports;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 import java.io.IOException;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 import java.io.Writer;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 import java.io.PrintWriter;
4938
b878dce3a671 Write some more metadata in AT-export header.
Raimund Renkert <rrenkert@intevation.de>
parents: 4911
diff changeset
14 import java.math.BigDecimal;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
4938
b878dce3a671 Write some more metadata in AT-export header.
Raimund Renkert <rrenkert@intevation.de>
parents: 4911
diff changeset
16 import java.text.DateFormat;
b878dce3a671 Write some more metadata in AT-export header.
Raimund Renkert <rrenkert@intevation.de>
parents: 4911
diff changeset
17 import java.util.Date;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 import java.util.Locale;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
20 import org.dive4elements.artifacts.CallMeta;
1658
7d11ad5a52d5 Bugfix: #332 Made AT-exports compatible with desktop FLYS.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1033
diff changeset
21
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
22 import org.dive4elements.river.artifacts.model.WQ;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5107
diff changeset
23 import org.dive4elements.river.artifacts.resources.Resources;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
732
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
25 import org.apache.commons.math.analysis.UnivariateRealFunction;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
732
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
27 import org.apache.commons.math.analysis.interpolation.SplineInterpolator;
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
28 import org.apache.commons.math.analysis.interpolation.LinearInterpolator;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
732
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
30 import org.apache.commons.math.analysis.polynomials.PolynomialFunction;
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
31
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
32 import org.apache.commons.math.FunctionEvaluationException;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
9726
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 8362
diff changeset
34 import org.apache.logging.log4j.Logger;
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 8362
diff changeset
35 import org.apache.logging.log4j.LogManager;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36
5107
a929d9a9fa1e Picky doc and whitespace fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4947
diff changeset
37 /** Write AT files. */
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 public class ATWriter
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 {
9726
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 8362
diff changeset
40 private static Logger log = LogManager.getLogger(ATWriter.class);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 public static final int COLUMNS = 10;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43
1658
7d11ad5a52d5 Bugfix: #332 Made AT-exports compatible with desktop FLYS.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1033
diff changeset
44 public static final String I18N_AT_HEADER =
7d11ad5a52d5 Bugfix: #332 Made AT-exports compatible with desktop FLYS.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1033
diff changeset
45 "export.discharge.curve.at.header";
7d11ad5a52d5 Bugfix: #332 Made AT-exports compatible with desktop FLYS.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1033
diff changeset
46
4941
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
47 public static final String I18N_AT_GAUGE_HEADER =
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
48 "export.discharge.curve.at.gauge.header";
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
49
732
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
50 public static final String EMPTY = " ";
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
52 public static double getQ(int w, UnivariateRealFunction qFunc) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
53 try {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
54 double val = qFunc.value(w);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
55 return val;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
56 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
57 catch (FunctionEvaluationException aode) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
58 // should not happen
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
59 log.error("spline interpolation failed", aode);
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
60 return Double.NaN;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
61 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
64 public static void printQ(PrintWriter out, double q) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
65 String format;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
66 if (q < 1d) format = " % 8.3f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
67 else if (q < 10d) format = " % 8.2f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
68 else if (q < 100d) format = " % 8.1f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
69 else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
70 format = " % 8.0f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
71 if (q > 1000d) q = Math.rint(q/10d)*10d;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
72 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
73 out.printf(Locale.US, format, q);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
74 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
75
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
76 protected static void printGaugeHeader(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
77 PrintWriter out,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
78 CallMeta callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
79 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
80 double km,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
81 String gName,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
82 BigDecimal datum,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
83 Date date,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
84 String unit
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
85 ) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
86 DateFormat f = DateFormat.getDateInstance(DateFormat.MEDIUM,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
87 Resources.getLocale(callMeta));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
88 out.print("*" + Resources.getMsg(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
89 callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
90 I18N_AT_GAUGE_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
91 I18N_AT_GAUGE_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
92 new Object[] { river, gName, f.format(date), datum, unit} ));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
93 out.print("\r\n");
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
94 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
95
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
96 protected static void printHeader(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
97 PrintWriter out,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
98 CallMeta callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
99 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
100 double km
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
101 ) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
102 out.print("*" + Resources.getMsg(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
103 callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
104 I18N_AT_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
105 I18N_AT_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
106 new Object[] { river, km } ));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
107 out.print("\r\n");
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
108 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
109
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
110 public static void write(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
111 WQ values,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
112 Writer writer,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
113 CallMeta meta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
114 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
115 double km,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
116 String gName,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
117 BigDecimal datum,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
118 Date date,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
119 String unit)
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
120 throws IOException
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
121 {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
122 int minW;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
123 int maxW;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
124 double minQ;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
125 double maxQ;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
126
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
127 UnivariateRealFunction qFunc;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
128
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
129 WQ wq = WQ.getFixedWQforExportAtGauge(values, datum);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
130
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
131 int [] bounds = wq.longestIncreasingWRangeIndices();
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
133 if (bounds[1]-bounds[0] < 1) { // Only first w can be written out.
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
134 minW = maxW = (int)Math.round(wq.getW(bounds[0]));
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
135 minQ = maxQ = wq.getQ(bounds[0]);
732
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
136 // constant function
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
137 qFunc = new PolynomialFunction(new double [] { minQ });
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 return;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140
7605
f51c943c707a (issue1560) Fix off by one error in ATWriter causing the last value to be omitted.
Andre Heinecke <aheinecke@intevation.de>
parents: 6310
diff changeset
141 /* example: bounds[0] = 0
f51c943c707a (issue1560) Fix off by one error in ATWriter causing the last value to be omitted.
Andre Heinecke <aheinecke@intevation.de>
parents: 6310
diff changeset
142 * bounds[1] = 5 -> we need to store 6 values.*/
f51c943c707a (issue1560) Fix off by one error in ATWriter causing the last value to be omitted.
Andre Heinecke <aheinecke@intevation.de>
parents: 6310
diff changeset
143
f51c943c707a (issue1560) Fix off by one error in ATWriter causing the last value to be omitted.
Andre Heinecke <aheinecke@intevation.de>
parents: 6310
diff changeset
144 double [] ws = new double[bounds[1]-bounds[0] + 1];
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 double [] qs = new double[ws.length];
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146
7605
f51c943c707a (issue1560) Fix off by one error in ATWriter causing the last value to be omitted.
Andre Heinecke <aheinecke@intevation.de>
parents: 6310
diff changeset
147 for (int i = 0; i < ws.length; i++) {
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
148 int idx = bounds[0]+i;
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
149 ws[i] = wq.getW(idx);
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
150 qs[i] = wq.getQ(idx);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152
732
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
153 qFunc = ws.length < 3
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
154 ? new LinearInterpolator().interpolate(ws, qs)
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
155 : new SplineInterpolator().interpolate(ws, qs);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
157 minW = (int)Math.ceil(wq.getW(bounds[0]));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
158 maxW = (int)Math.floor(wq.getW(bounds[1]));
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
159 minQ = wq.getQ(bounds[0]);
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
160 maxQ = wq.getQ(bounds[1]);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161 PrintWriter out = new PrintWriter(writer);
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
162
5107
a929d9a9fa1e Picky doc and whitespace fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4947
diff changeset
163 // A header is required, because the desktop version of FLYS will skip
1658
7d11ad5a52d5 Bugfix: #332 Made AT-exports compatible with desktop FLYS.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1033
diff changeset
164 // the first row.
4941
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
165 if (gName != null) {
8362
839032ac1523 Purge obsolete representation of reference system for discharge tables.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
166 printGaugeHeader(out, meta, river, km, gName, datum, date, unit);
4941
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
167 }
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
168 else {
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
169 printHeader(out, meta, river, km);
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
170 }
4911
da89bb3243d3 Fixed CR and LF in header of AT export.
Raimund Renkert <rrenkert@intevation.de>
parents: 4909
diff changeset
171
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
172 int rest = minW % 10;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
174 int startW = minW - rest;
1682
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
175
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
176 if (log.isDebugEnabled()) {
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
177 log.debug("startW: " + startW);
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
178 log.debug("rest: " + rest);
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
179 log.debug("maxW: " + maxW);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182 int col = 0;
7605
f51c943c707a (issue1560) Fix off by one error in ATWriter causing the last value to be omitted.
Andre Heinecke <aheinecke@intevation.de>
parents: 6310
diff changeset
183 for (int w = startW; w <= maxW; w++) {
732
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
184 if (col == 0) {
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
185 out.printf(Locale.US, "%8d", w);
732
39d191f011dc ATWriter: Results are now in cm. Made it more robust against corner cases.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
186 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
187
1682
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
188 if (w < minW) {
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
189 out.print(EMPTY);
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
190 } else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
191 double actQ = getQ(w, qFunc);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
192 if (Double.isNaN(actQ)) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
193 // Can't happen™
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
194 break;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
195 } else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
196 printQ(out, actQ);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
197 }
1682
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
198 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
199
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
200 if (++col >= COLUMNS) {
4947
7669747d22f2 Fix cr/nl in ATWriter.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4942
diff changeset
201 out.print("\r\n");
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 col = 0;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
203 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
204 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206 if (col > 0) {
4947
7669747d22f2 Fix cr/nl in ATWriter.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4942
diff changeset
207 out.print("\r\n");
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
208 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
209
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
210 out.flush();
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
211 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
212 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
213 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org