Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/exports/ATWriter.java @ 6332:f5bb53106ae8
Remove createBarriersLayer and createBarriers
The generated mapfiles did not work and were just confusing. This
looks like historical cruft that was never deleted. The real barrier
mapfiles are created in the Floodmap state
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Thu, 13 Jun 2013 17:24:56 +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 : |