comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FixingsKMChartService.java @ 3162:0d8146989012

Added labeling for Q/W points FixingsKMChartService. flys-artifacts/trunk@4774 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 25 Jun 2012 11:38:33 +0000
parents 368d1837ce5d
children 6d0567a8387d
comparison
equal deleted inserted replaced
3161:cd8d81b2824d 3162:0d8146989012
16 import de.intevation.flys.artifacts.model.FixingsOverviewFactory; 16 import de.intevation.flys.artifacts.model.FixingsOverviewFactory;
17 import de.intevation.flys.artifacts.model.GaugeFinder; 17 import de.intevation.flys.artifacts.model.GaugeFinder;
18 import de.intevation.flys.artifacts.model.GaugeFinderFactory; 18 import de.intevation.flys.artifacts.model.GaugeFinderFactory;
19 import de.intevation.flys.artifacts.model.GaugeRange; 19 import de.intevation.flys.artifacts.model.GaugeRange;
20 20
21 import de.intevation.flys.artifacts.model.fixings.QW;
22
21 import de.intevation.flys.backend.SessionHolder; 23 import de.intevation.flys.backend.SessionHolder;
22 24
25 import de.intevation.flys.utils.Formatter;
23 import de.intevation.flys.utils.Pair; 26 import de.intevation.flys.utils.Pair;
24
25 import gnu.trove.TDoubleArrayList;
26 27
27 import java.awt.BasicStroke; 28 import java.awt.BasicStroke;
28 import java.awt.Color; 29 import java.awt.Color;
29 import java.awt.Dimension; 30 import java.awt.Dimension;
30 import java.awt.Transparency; 31 import java.awt.Transparency;
31 32
33 import java.awt.geom.Rectangle2D;
34
32 import java.awt.image.BufferedImage; 35 import java.awt.image.BufferedImage;
33 36
34 import java.io.ByteArrayOutputStream; 37 import java.io.ByteArrayOutputStream;
35 import java.io.IOException; 38 import java.io.IOException;
36 39
42 import org.apache.log4j.Logger; 45 import org.apache.log4j.Logger;
43 46
44 import org.jfree.chart.ChartFactory; 47 import org.jfree.chart.ChartFactory;
45 import org.jfree.chart.ChartUtilities; 48 import org.jfree.chart.ChartUtilities;
46 import org.jfree.chart.JFreeChart; 49 import org.jfree.chart.JFreeChart;
50 import org.jfree.chart.LegendItemCollection;
51
52 import org.jfree.chart.axis.NumberAxis;
47 53
48 import org.jfree.chart.plot.Marker; 54 import org.jfree.chart.plot.Marker;
49 import org.jfree.chart.plot.PlotOrientation; 55 import org.jfree.chart.plot.PlotOrientation;
50 import org.jfree.chart.plot.ValueMarker; 56 import org.jfree.chart.plot.ValueMarker;
51 import org.jfree.chart.plot.XYPlot; 57 import org.jfree.chart.plot.XYPlot;
52 58
53 import org.jfree.data.xy.DefaultXYDataset; 59 import org.jfree.data.Range;
54 60
55 import org.jfree.ui.RectangleAnchor; 61 import org.jfree.ui.RectangleAnchor;
56 import org.jfree.ui.TextAnchor; 62 import org.jfree.ui.TextAnchor;
57 63
58 import org.w3c.dom.Document; 64 import org.w3c.dom.Document;
175 if (data != null) { 181 if (data != null) {
176 cols.add(new Pair<Fixing.Column, FixingsColumn>(col, data)); 182 cols.add(new Pair<Fixing.Column, FixingsColumn>(col, data));
177 } 183 }
178 } 184 }
179 185
180 JFreeChart chart = createChart(cols, river, km); 186 JFreeChart chart = createChart(cols, river, km, callMeta);
181 187
182 return encode(chart, extent, format); 188 return encode(chart, extent, format);
183 } 189 }
184 190
185 protected static Output encode( 191 protected static Output encode(
205 return new Output(out.toByteArray(), "image/" + format); 211 return new Output(out.toByteArray(), "image/" + format);
206 } 212 }
207 213
208 protected static JFreeChart createChart( 214 protected static JFreeChart createChart(
209 List<Pair<Fixing.Column, FixingsColumn>> cols, 215 List<Pair<Fixing.Column, FixingsColumn>> cols,
210 String river, 216 String river,
211 double km 217 double km,
218 CallMeta callMeta
212 ) { 219 ) {
213 220 // TODO: I18N
214 TDoubleArrayList ws = new TDoubleArrayList(cols.size()); 221 QWSeriesCollection dataset = new QWSeriesCollection();
215 TDoubleArrayList qs = new TDoubleArrayList(cols.size());
216 222
217 double [] w = new double[1]; 223 double [] w = new double[1];
218 for (Pair<Fixing.Column, FixingsColumn> col: cols) { 224 for (Pair<Fixing.Column, FixingsColumn> col: cols) {
219 boolean interpolated = col.getB().getW(km, w); 225 boolean interpolated = !col.getB().getW(km, w);
220 // TODO: Do something special with the interpolated values.
221 double q = col.getB().getQ(km); 226 double q = col.getB().getQ(km);
222 if (!Double.isNaN(w[0]) && !Double.isNaN(q)) { 227 if (!Double.isNaN(w[0]) && !Double.isNaN(q)) {
223 ws.add(w[0]); 228 QW qw = new QW(
224 qs.add(q); 229 q, w[0],
225 // TODO: Generate labels depending on sectors. 230 col.getA().getDescription(),
226 } 231 col.getA().getStartTime(),
227 } 232 interpolated);
228 233 dataset.add(qw);
229 DefaultXYDataset dataset = new DefaultXYDataset(); 234 }
230 235 }
231 dataset.addSeries( 236
232 "Fixierungen", // TODO: i18n 237 JFreeChart chart = ChartFactory.createXYLineChart(
233 new double [][] { qs.toNativeArray(), ws.toNativeArray() });
234
235 JFreeChart chart = ChartFactory.createScatterPlot(
236 "Fixierungen " + river + ": km " + km, // TODO: i18n 238 "Fixierungen " + river + ": km " + km, // TODO: i18n
237 "Q", // TODO: i18n 239 "Q [m\u00b3/s]",
238 "W", // TODO: i18n 240 "W [NN + m]",
239 dataset, 241 null,
240 PlotOrientation.VERTICAL, 242 PlotOrientation.VERTICAL,
241 true, 243 true,
242 false, 244 true,
243 false); 245 false);
244 246
245 applyQSectorMarkers(chart.getXYPlot(), river, km); 247 XYPlot plot = (XYPlot)chart.getPlot();
248
249 NumberAxis qA = (NumberAxis)plot.getDomainAxis();
250 qA.setNumberFormatOverride(Formatter.getWaterlevelQ(callMeta));
251
252 NumberAxis wA = (NumberAxis)plot.getRangeAxis();
253 wA.setNumberFormatOverride(Formatter.getWaterlevelW(callMeta));
254
255 plot.setRenderer(0, dataset.createRenderer());
256 plot.setDataset(0, dataset);
257
258 Rectangle2D area = dataset.getArea();
259
260 if (area != null) {
261 double wInset = area.getHeight() * 0.25d;
262 log.debug("width: " + area.getWidth());
263 log.debug("height: "+ area.getHeight());
264
265 wA.setAutoRangeIncludesZero(false);
266 wA.setRange(new Range(
267 area.getMinY() - wInset,
268 area.getMaxY() + wInset));
269 }
270
271 LegendItemCollection lic = plot.getLegendItems();
272 dataset.addLegendItems(lic);
273 plot.setFixedLegendItems(lic);
274
275 applyQSectorMarkers(plot, river, km);
246 276
247 ChartUtilities.applyCurrentTheme(chart); 277 ChartUtilities.applyCurrentTheme(chart);
248 278
249 return chart; 279 return chart;
250 } 280 }

http://dive4elements.wald.intevation.org