# HG changeset patch # User Ingo Weinzierl # Date 1268061308 0 # Node ID b98d1adee7a60a5c13c336a54992f6429376bef5 # Parent 6eccb68a8b9955b8694d38a64d8d0b967f904d28 Added an offset of five percent between values and chart border in vertical profile charts (issue186). gnv-artifacts/trunk@749 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 6eccb68a8b99 -r b98d1adee7a6 gnv-artifacts/ChangeLog --- a/gnv-artifacts/ChangeLog Mon Mar 08 14:04:28 2010 +0000 +++ b/gnv-artifacts/ChangeLog Mon Mar 08 15:15:08 2010 +0000 @@ -1,3 +1,23 @@ +2010-03-08 Ingo Weinzierl + + Issue186 + + * src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java: Adjusted + signature of method to store min/max ranges in x and y direction in + charts. + + * src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java: Adjusted + method call to signature which has been changed in AbstractXYLineChart. + + * src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java: Added + some empty methods which overrides methods from parent which should not be + called on this class. + + * src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java: Added + methods to store vertical min/max ranges in charts. After adding a new + series to this chart, we call prepareRangeAxis() to add an offset (5 + percent) between values and chart border. + 2010-03-08 Tim Englich * doc/conf/maptemplates/layer*.vm: diff -r 6eccb68a8b99 -r b98d1adee7a6 gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java Mon Mar 08 14:04:28 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java Mon Mar 08 15:15:08 2010 +0000 @@ -112,7 +112,7 @@ // litte workarround to adjust the max range of axes. // NumberAxis.setAutoRange(true) doesn't seem to work properly. - Range yRange = (Range) ranges.get(seriesKey); + Range yRange = (Range) ranges.get(seriesKey); yAxis.setRange(Range.expand(yRange, LOWER_MARGIN, UPPER_MARGIN)); log.debug("Max Range of dataset is: " + yRange.toString()); @@ -256,7 +256,7 @@ } - protected void storeMaxRange(double value, String parameter) { + protected void storeMaxRange(Map ranges, double value, String parameter) { Range range = null; range = ranges.containsKey(parameter) diff -r 6eccb68a8b99 -r b98d1adee7a6 gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java Mon Mar 08 14:04:28 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java Mon Mar 08 15:15:08 2010 +0000 @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.Locale; +import java.util.Map; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.io.WKTReader; @@ -57,6 +58,18 @@ } + @Override + protected Object getValue(Result row) { + try { + return (Point) wktReader.read(row.getString("SHAPE")); + } + catch(ParseException pe) { + log.warn("No data found while parsing."); + return null; + } + } + + protected void gapDetection( Result[] results, Series series, @@ -123,6 +136,20 @@ } + @Override + protected void prepareRangeAxis(String seriesKey, int idx) { + return; + // do nothing here + } + + + @Override + protected void storeMaxValue(Map values, Object value, String parameter) { + return; + // do nothing here + } + + protected String createSeriesName( String breakPoint1, String breakPoint2, diff -r 6eccb68a8b99 -r b98d1adee7a6 gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java Mon Mar 08 14:04:28 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java Mon Mar 08 15:15:08 2010 +0000 @@ -161,7 +161,7 @@ } addValue(row, series); - storeMaxRange(row.getDouble("YORDINATE"), parameter); + storeMaxRange(ranges, row.getDouble("YORDINATE"), parameter); endPos++; } diff -r 6eccb68a8b99 -r b98d1adee7a6 gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java Mon Mar 08 14:04:28 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java Mon Mar 08 15:15:08 2010 +0000 @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.HashMap; +import java.util.Map; import java.util.Iterator; import java.util.Locale; @@ -9,10 +10,12 @@ import org.jfree.chart.ChartTheme; import org.jfree.chart.axis.Axis; +import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.plot.PlotOrientation; +import org.jfree.data.Range; +import org.jfree.data.general.Series; import org.jfree.data.xy.XYSeries; -import org.jfree.data.general.Series; import org.jfree.data.xy.XYSeriesCollection; import de.intevation.gnv.geobackend.base.Result; @@ -33,6 +36,10 @@ protected final double GAP_MAX_LEVEL = Math.sqrt(2.0); protected final int GAP_MAX_VALUES = 60; + /** Map to store max ranges of each parameter (axis.setAutoRange(true) + * doesn't seem to work properly. */ + protected Map values; + public VerticalProfileChart( ChartLabels labels, @@ -59,6 +66,7 @@ this.shapesVisible = shapesVisible; this.datasets = new HashMap(); this.ranges = new HashMap(); + this.values = new HashMap(); } @@ -118,9 +126,12 @@ } addValue(row, series); - Double value = row.getDouble("YORDINATE"); - if (value != null) - storeMaxRange(value, parameter); + Object x = getValue(row); + Double y = row.getDouble("YORDINATE"); + if (x != null && y != null) { + storeMaxRange(ranges, y, parameter); + storeMaxValue(values, x, parameter); + } endPos++; } @@ -134,6 +145,11 @@ } + protected Object getValue(Result row) { + return row.getDouble("XORDINATE"); + } + + protected void gapDetection( Result[] results, Series series, @@ -149,6 +165,16 @@ } + protected void prepareRangeAxis(String seriesKey, int idx) { + XYPlot plot = chart.getXYPlot(); + NumberAxis xAxis = (NumberAxis) plot.getDomainAxis(); + + Range xRange = (Range) values.get(seriesKey); + xAxis.setRange(Range.expand(xRange, LOWER_MARGIN, UPPER_MARGIN)); + log.debug("Max X-Range of dataset is: " + xRange.toString()); + } + + protected void addValue(Result row, Series series) { ((XYSeries) series).add( row.getDouble("XORDINATE"), @@ -194,6 +220,7 @@ plot.setDataset(idx, xysc ); log.debug("Added " + key + " parameter to plot."); prepareAxis(key, idx); + prepareRangeAxis(key, idx); adjustRenderer( idx++, xysc.getSeriesCount(), @@ -205,6 +232,24 @@ } + protected void storeMaxValue(Map values, Object val, String parameter) { + double value = ((Double) val).doubleValue(); + Range range = null; + + range = values.containsKey(parameter) + ? (Range) values.get(parameter) + : new Range(value, value); + + double lower = range.getLowerBound(); + double upper = range.getUpperBound(); + + lower = value < lower ? value : lower; + upper = value > upper ? value : upper; + + values.put(parameter, new Range(lower, upper)); + } + + protected void localizeDomainAxis(Axis axis, Locale locale) { // call localizeRangeAxis from superclass which formats NumberAxis super.localizeRangeAxis(axis, locale);