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 :

http://dive4elements.wald.intevation.org