annotate artifacts/src/main/java/org/dive4elements/river/exports/ATWriter.java @ 8362:839032ac1523

Purge obsolete representation of reference system for discharge tables.
author Tom Gottfried <tom@intevation.de>
date Wed, 01 Oct 2014 15:54:47 +0200
parents e4606eae8ea5
children 0a5239a1e46e
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 {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
39 private static Logger log = Logger.getLogger(ATWriter.class);
729
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
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
49 public static final String EMPTY = " ";
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
51 public static double getQ(int w, UnivariateRealFunction qFunc) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
52 try {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
53 double val = qFunc.value(w);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
54 return val;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
55 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
56 catch (FunctionEvaluationException aode) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
57 // should not happen
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
58 log.error("spline interpolation failed", aode);
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
59 return Double.NaN;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
60 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
63 public static void printQ(PrintWriter out, double q) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
64 String format;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
65 if (q < 1d) format = " % 8.3f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
66 else if (q < 10d) format = " % 8.2f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
67 else if (q < 100d) format = " % 8.1f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
68 else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
69 format = " % 8.0f";
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
70 if (q > 1000d) q = Math.rint(q/10d)*10d;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
71 }
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
72 out.printf(Locale.US, format, q);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
73 }
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 protected static void printGaugeHeader(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
76 PrintWriter out,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
77 CallMeta callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
78 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
79 double km,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
80 String gName,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
81 BigDecimal datum,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
82 Date date,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
83 String unit
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
84 ) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
85 DateFormat f = DateFormat.getDateInstance(DateFormat.MEDIUM,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
86 Resources.getLocale(callMeta));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
87 out.print("*" + Resources.getMsg(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
88 callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
89 I18N_AT_GAUGE_HEADER,
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 new Object[] { river, gName, f.format(date), datum, unit} ));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
92 out.print("\r\n");
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
93 }
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 protected static void printHeader(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
96 PrintWriter out,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
97 CallMeta callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
98 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
99 double km
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
100 ) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
101 out.print("*" + Resources.getMsg(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
102 callMeta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
103 I18N_AT_HEADER,
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 new Object[] { river, km } ));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
106 out.print("\r\n");
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
107 }
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 public static void write(
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
110 WQ values,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
111 Writer writer,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
112 CallMeta meta,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
113 String river,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
114 double km,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
115 String gName,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
116 BigDecimal datum,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
117 Date date,
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
118 String unit)
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
119 throws IOException
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
120 {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
121 int minW;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
122 int maxW;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
123 double minQ;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
124 double maxQ;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
125
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
126 UnivariateRealFunction qFunc;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
127
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
128 WQ wq = WQ.getFixedWQforExportAtGauge(values, datum);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
129
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
130 int [] bounds = wq.longestIncreasingWRangeIndices();
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131
1033
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
132 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
133 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
134 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
135 // 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
136 qFunc = new PolynomialFunction(new double [] { minQ });
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 return;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139
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
140 /* 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
141 * 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
142
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 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
144 double [] qs = new double[ws.length];
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145
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
146 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
147 int idx = bounds[0]+i;
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
148 ws[i] = wq.getW(idx);
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
149 qs[i] = wq.getQ(idx);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 }
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151
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
152 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
153 ? 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
154 : new SplineInterpolator().interpolate(ws, qs);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
156 minW = (int)Math.ceil(wq.getW(bounds[0]));
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
157 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
158 minQ = wq.getQ(bounds[0]);
821aaceb2776 Fix for flys/issue191
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 747
diff changeset
159 maxQ = wq.getQ(bounds[1]);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160 PrintWriter out = new PrintWriter(writer);
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161
5107
a929d9a9fa1e Picky doc and whitespace fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4947
diff changeset
162 // 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
163 // 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
164 if (gName != null) {
8362
839032ac1523 Purge obsolete representation of reference system for discharge tables.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
165 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
166 }
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
167 else {
65059ad920c6 Use different header in AT export files for gauges and at km.
Raimund Renkert <rrenkert@intevation.de>
parents: 4938
diff changeset
168 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
169 }
4911
da89bb3243d3 Fixed CR and LF in header of AT export.
Raimund Renkert <rrenkert@intevation.de>
parents: 4909
diff changeset
170
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
171 int rest = minW % 10;
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
173 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
174
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
175 if (log.isDebugEnabled()) {
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
176 log.debug("startW: " + startW);
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
177 log.debug("rest: " + rest);
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7605
diff changeset
178 log.debug("maxW: " + maxW);
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179 }
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 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
182 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
183 if (col == 0) {
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
184 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
185 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
186
1682
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
187 if (w < minW) {
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
188 out.print(EMPTY);
6304
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
189 } else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
190 double actQ = getQ(w, qFunc);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
191 if (Double.isNaN(actQ)) {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
192 // Can't happen™
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
193 break;
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
194 } else {
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
195 printQ(out, actQ);
152e1ba8e5bd Rework ATWriter/Exporter
Andre Heinecke <aheinecke@intevation.de>
parents: 6234
diff changeset
196 }
1682
394b7ac58fc9 ATWriter: Get rid of buggy first line code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
197 }
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
198
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
199 if (++col >= COLUMNS) {
4947
7669747d22f2 Fix cr/nl in ATWriter.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4942
diff changeset
200 out.print("\r\n");
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201 col = 0;
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 }
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 if (col > 0) {
4947
7669747d22f2 Fix cr/nl in ATWriter.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4942
diff changeset
206 out.print("\r\n");
729
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
207 }
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 out.flush();
078934923acb New AT writer for results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
210 }
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 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org