Mercurial > dive4elements > river
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 } |