annotate artifacts/src/main/java/org/dive4elements/river/exports/ATWriter.java @ 6611:dfdeed3e997e

Shorten and correct waterlevel not in gauge string
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 18 Jul 2013 17:54:44 +0200
parents 3ac657d60e60
children f51c943c707a
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
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 import org.apache.log4j.Logger;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
5107
a929d9a9fa1e Picky doc and whitespace fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4947
diff changeset
36 /** Write AT files. */
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 public class ATWriter
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 {
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 private static Logger logger = Logger.getLogger(ATWriter.class);
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 public static final int COLUMNS = 10;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42
1658
7d11ad5a52d5 Bugfix: #332 Made AT-exports compatible with desktop FLYS.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1033
diff changeset
43 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
44 "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
45
4941
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
46 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
47 "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
48
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
49 public static final String I18N_AT_CALC_GAUGE_HEADER =
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
50 "export.discharge.curve.at.gauge.calc.header";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
51
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
52 public static final String EMPTY = " ";
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
54 public static double getQ(int w, UnivariateRealFunction qFunc) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
55 try {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
56 double val = qFunc.value(w);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
57 return val;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
58 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
59 catch (FunctionEvaluationException aode) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
60 // should not happen
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
61 logger.error("spline interpolation failed", aode);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
62 return Double.NaN;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
63 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
66 public static void printQ(PrintWriter out, double q) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
67 String format;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
68 if (q < 1d) format = " % 8.3f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
69 else if (q < 10d) format = " % 8.2f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
70 else if (q < 100d) format = " % 8.1f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
71 else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
72 format = " % 8.0f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
73 if (q > 1000d) q = Math.rint(q/10d)*10d;
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 out.printf(Locale.US, format, q);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
76 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
77
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
78 protected static void printCalculatedGaugeHeader(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
79 PrintWriter out,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
80 CallMeta callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
81 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
82 double km,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
83 String gName,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
84 BigDecimal datum,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
85 Date date,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
86 String unit
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
87 ) {
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_CALC_GAUGE_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
91 I18N_AT_CALC_GAUGE_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
92 new Object[] { river, gName, 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 printGaugeHeader(
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 String gName,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
102 BigDecimal datum,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
103 Date date,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
104 String unit
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
105 ) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
106 DateFormat f = DateFormat.getDateInstance(DateFormat.MEDIUM,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
107 Resources.getLocale(callMeta));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
108 out.print("*" + Resources.getMsg(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
109 callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
110 I18N_AT_GAUGE_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
111 I18N_AT_GAUGE_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
112 new Object[] { river, gName, f.format(date), datum, unit} ));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
113 out.print("\r\n");
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
114 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
115
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
116 protected static void printHeader(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
117 PrintWriter out,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
118 CallMeta callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
119 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
120 double km
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 out.print("*" + Resources.getMsg(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
123 callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
124 I18N_AT_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
125 I18N_AT_HEADER,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
126 new Object[] { river, km } ));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
127 out.print("\r\n");
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
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
130 public static void write(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
131 WQ values,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
132 Writer writer,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
133 CallMeta meta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
134 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
135 double km,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
136 String gName,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
137 BigDecimal datum,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
138 Date date,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
139 String unit)
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
140 throws IOException
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
141 {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
142 int minW;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
143 int maxW;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
144 double minQ;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
145 double maxQ;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
146
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
147 UnivariateRealFunction qFunc;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
148
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
149 WQ wq = WQ.getFixedWQforExportAtGauge(values, datum);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
150
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
151 // If we converted to centimeter we know that the WQ table is
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
152 // calculated because of the assumption that all calculations
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
153 // are in Meter and only the discharge tables data is in meter.
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
154 boolean isCalculation = wq.getReferenceSystem() != values.getReferenceSystem();
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
156 int [] bounds = wq.longestIncreasingWRangeIndices();
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
158 if (logger.isDebugEnabled()) {
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
159 logger.debug("exporting " + (isCalculation ? "calculated " : "") +
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
160 "w between indices " + bounds[0] + " and " + bounds[1] + " (" +
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
161 (int)Math.ceil(wq.getW(bounds[0])) + ", " +
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
162 (int)Math.floor(wq.getW(bounds[1]))+ ")");
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
163 }
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
164
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
165 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
166 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
167 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
168 // 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
169 qFunc = new PolynomialFunction(new double [] { minQ });
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170 return;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
171 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
173 double [] ws = new double[bounds[1]-bounds[0]];
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
174 double [] qs = new double[ws.length];
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
175
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
176 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
177 int idx = bounds[0]+i;
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
178 ws[i] = wq.getW(idx);
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
179 qs[i] = wq.getQ(idx);
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
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
182 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
183 ? 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
184 : new SplineInterpolator().interpolate(ws, qs);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
185
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
186 minW = (int)Math.ceil(wq.getW(bounds[0]));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
187 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
188 minQ = wq.getQ(bounds[0]);
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
189 maxQ = wq.getQ(bounds[1]);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190 PrintWriter out = new PrintWriter(writer);
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191
5107
a929d9a9fa1e Picky doc and whitespace fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4947
diff changeset
192 // 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
193 // 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
194 if (gName != null) {
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
195 if (isCalculation) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
196 printCalculatedGaugeHeader(out, meta, river, km, gName, datum, date, unit);
6310
3ac657d60e60 Don't print two header at calculated gauges
Andre Heinecke <aheinecke@intevation.de>
parents: 6304
diff changeset
197 } else {
3ac657d60e60 Don't print two header at calculated gauges
Andre Heinecke <aheinecke@intevation.de>
parents: 6304
diff changeset
198 printGaugeHeader(out, meta, river, km, gName, datum, date, unit);
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
199 }
4941
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
200 }
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
201 else {
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
202 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
203 }
4911
da89bb3243d3 Fixed CR and LF in header of AT export.
Raimund Renkert <rrenkert@intevation.de>
parents: 4909
diff changeset
204
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
205 int rest = minW % 10;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
207 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
208
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
209 if (logger.isDebugEnabled()) {
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
210 logger.debug("startW: " + startW);
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
211 logger.debug("rest: " + rest);
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
212 logger.debug("maxW: " + maxW);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
213 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
214
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
215 int col = 0;
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
216 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
217 if (col == 0) {
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
218 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
219 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220
1682
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
221 if (w < minW) {
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
222 out.print(EMPTY);
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
223 } else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
224 double actQ = getQ(w, qFunc);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
225 if (Double.isNaN(actQ)) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
226 // Can't happen™
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
227 break;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
228 } else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
229 printQ(out, actQ);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
230 }
1682
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
231 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
232
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
233 if (++col >= COLUMNS) {
4947
7669747d22f2 Fix cr/nl in ATWriter.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4942
diff changeset
234 out.print("\r\n");
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
235 col = 0;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
236 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
237 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
238
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
239 if (col > 0) {
4947
7669747d22f2 Fix cr/nl in ATWriter.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4942
diff changeset
240 out.print("\r\n");
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
241 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
242
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243 out.flush();
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
244 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
245 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
246 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org