Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java @ 298:80f7c5dc09c6
Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
gnv-artifacts/trunk@352 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 19 Nov 2009 15:30:27 +0000 |
parents | |
children | 45625b5cd6d4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java Thu Nov 19 15:30:27 2009 +0000 @@ -0,0 +1,93 @@ +package de.intevation.gnv.chart; + +import java.util.Collection; +import java.util.Locale; + +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.io.WKTReader; +import com.vividsolutions.jts.io.ParseException; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.data.general.Series; +import org.jfree.data.xy.XYSeries; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.utils.DistanceCalculator; + + +/** + * @author Ingo Weinzierl <ingo.weinzierl@intevation.de> + */ +public class HorizontalProfileChart +extends VerticalProfileChart +{ + private static Logger log = Logger.getLogger(HorizontalProfileChart.class); + + private static WKTReader wktReader = new WKTReader(); + private Point lastPoint; + private double distance; + + + public HorizontalProfileChart( + ChartLabels labels, + ChartTheme theme, + Collection parameters, + Collection measurements, + Collection result, + Collection dates, + Locale locale + ) { + super(labels, theme, parameters, measurements, result, dates, locale); + this.PLOT_ORIENTATION = PlotOrientation.VERTICAL; + this.distance = 0; + } + + + protected void addValue(Result row, Series series) { + // TODO look for gaps between two values + try { + Point point = (Point) wktReader.read(row.getString("SHAPE")); + if (lastPoint != null) + distance = distance + DistanceCalculator.calculateDistance( + lastPoint, point + ); + lastPoint = point; + + ((XYSeries) series).add( + distance, + row.getDouble("YORDINATE") + ); + } + catch(ParseException pe) { + log.warn("No data found while parsing."); + } + } + + + protected void addSeries(Series series, int idx) { + super.addSeries(series, idx); + + // reset values used by current series for next series + lastPoint = null; + distance = 0; + } + + + protected String createSeriesName( + String breakPoint1, + String breakPoint2, + String breakPoint3 + ) { + log.debug("create seriesname of horizontalprofile chart"); + return super.createSeriesName( + breakPoint1, + breakPoint2, + breakPoint3) + + " " + + findValueTitle(dates, breakPoint3); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=latin1 :