Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FixingsKMChartService.java Mon Jun 25 07:59:22 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FixingsKMChartService.java Mon Jun 25 11:38:33 2012 +0000 @@ -18,17 +18,20 @@ import de.intevation.flys.artifacts.model.GaugeFinderFactory; import de.intevation.flys.artifacts.model.GaugeRange; +import de.intevation.flys.artifacts.model.fixings.QW; + import de.intevation.flys.backend.SessionHolder; +import de.intevation.flys.utils.Formatter; import de.intevation.flys.utils.Pair; -import gnu.trove.TDoubleArrayList; - import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Transparency; +import java.awt.geom.Rectangle2D; + import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; @@ -44,13 +47,16 @@ import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; +import org.jfree.chart.LegendItemCollection; + +import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.Marker; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.ValueMarker; import org.jfree.chart.plot.XYPlot; -import org.jfree.data.xy.DefaultXYDataset; +import org.jfree.data.Range; import org.jfree.ui.RectangleAnchor; import org.jfree.ui.TextAnchor; @@ -177,7 +183,7 @@ } } - JFreeChart chart = createChart(cols, river, km); + JFreeChart chart = createChart(cols, river, km, callMeta); return encode(chart, extent, format); } @@ -207,42 +213,66 @@ protected static JFreeChart createChart( List<Pair<Fixing.Column, FixingsColumn>> cols, - String river, - double km + String river, + double km, + CallMeta callMeta ) { - - TDoubleArrayList ws = new TDoubleArrayList(cols.size()); - TDoubleArrayList qs = new TDoubleArrayList(cols.size()); + // TODO: I18N + QWSeriesCollection dataset = new QWSeriesCollection(); double [] w = new double[1]; for (Pair<Fixing.Column, FixingsColumn> col: cols) { - boolean interpolated = col.getB().getW(km, w); - // TODO: Do something special with the interpolated values. + boolean interpolated = !col.getB().getW(km, w); double q = col.getB().getQ(km); if (!Double.isNaN(w[0]) && !Double.isNaN(q)) { - ws.add(w[0]); - qs.add(q); - // TODO: Generate labels depending on sectors. + QW qw = new QW( + q, w[0], + col.getA().getDescription(), + col.getA().getStartTime(), + interpolated); + dataset.add(qw); } } - DefaultXYDataset dataset = new DefaultXYDataset(); - - dataset.addSeries( - "Fixierungen", // TODO: i18n - new double [][] { qs.toNativeArray(), ws.toNativeArray() }); - - JFreeChart chart = ChartFactory.createScatterPlot( + JFreeChart chart = ChartFactory.createXYLineChart( "Fixierungen " + river + ": km " + km, // TODO: i18n - "Q", // TODO: i18n - "W", // TODO: i18n - dataset, + "Q [m\u00b3/s]", + "W [NN + m]", + null, PlotOrientation.VERTICAL, true, - false, + true, false); - applyQSectorMarkers(chart.getXYPlot(), river, km); + XYPlot plot = (XYPlot)chart.getPlot(); + + NumberAxis qA = (NumberAxis)plot.getDomainAxis(); + qA.setNumberFormatOverride(Formatter.getWaterlevelQ(callMeta)); + + NumberAxis wA = (NumberAxis)plot.getRangeAxis(); + wA.setNumberFormatOverride(Formatter.getWaterlevelW(callMeta)); + + plot.setRenderer(0, dataset.createRenderer()); + plot.setDataset(0, dataset); + + Rectangle2D area = dataset.getArea(); + + if (area != null) { + double wInset = area.getHeight() * 0.25d; + log.debug("width: " + area.getWidth()); + log.debug("height: "+ area.getHeight()); + + wA.setAutoRangeIncludesZero(false); + wA.setRange(new Range( + area.getMinY() - wInset, + area.getMaxY() + wInset)); + } + + LegendItemCollection lic = plot.getLegendItems(); + dataset.addLegendItems(lic); + plot.setFixedLegendItems(lic); + + applyQSectorMarkers(plot, river, km); ChartUtilities.applyCurrentTheme(chart);