comparison gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java @ 1085:ec512e7992c6

Improved data initialization and axis range calculation in vertical profiles (scalar and vector). gnv-artifacts/trunk@1187 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 09 Jun 2010 17:11:54 +0000
parents 8b6ef091d38c
children f953c9a559d8
comparison
equal deleted inserted replaced
1084:81ac8d2f6cb7 1085:ec512e7992c6
125 */ 125 */
126 @Override 126 @Override
127 protected void initData() { 127 protected void initData() {
128 log.debug("init data for VerticalProfileChart"); 128 log.debug("init data for VerticalProfileChart");
129 129
130 int items = resultSet.size();
131 log.debug("Found " + items + " items for this chart.");
132
130 String breakPoint1 = null; 133 String breakPoint1 = null;
131 String breakPoint2 = null; 134 String breakPoint2 = null;
132 String breakPoint3 = null; 135 String breakPoint3 = null;
133 136
134 Iterator iter = resultSet.iterator(); 137 Iterator iter = resultSet.iterator();
155 !row.getString("GROUP3").equals(breakPoint3) 158 !row.getString("GROUP3").equals(breakPoint3)
156 ) { 159 ) {
157 log.debug("prepare data/plot for next dataset"); 160 log.debug("prepare data/plot for next dataset");
158 161
159 if(series != null) { 162 if(series != null) {
160 gapDetection(results, series, startPos, endPos); 163 if (startPos >= 0 && endPos < items) {
164 gapDetection(results, series, startPos, endPos);
165 }
161 addSeries(series, parameter, idx); 166 addSeries(series, parameter, idx);
162 167
163 startPos = endPos +1; 168 startPos = endPos +1;
164 } 169 }
165 170
187 storeMaxValue(values, x, parameter); 192 storeMaxValue(values, x, parameter);
188 } 193 }
189 endPos++; 194 endPos++;
190 } 195 }
191 196
192 if (results.length == 0) 197 if (items == 0)
193 return; 198 return;
194 199
195 gapDetection(results, series, startPos, endPos); 200 if (startPos >= 0 && endPos < items) {
201 gapDetection(results, series, startPos, endPos);
202 }
196 addSeries(series, parameter, idx); 203 addSeries(series, parameter, idx);
197 204
198 addDatasets(); 205 addDatasets();
199 } 206 }
200 207
242 @Override 249 @Override
243 protected void prepareAxis(String seriesKey, int idx) { 250 protected void prepareAxis(String seriesKey, int idx) {
244 super.prepareAxis(seriesKey, idx); 251 super.prepareAxis(seriesKey, idx);
245 252
246 XYPlot plot = chart.getXYPlot(); 253 XYPlot plot = chart.getXYPlot();
247 NumberAxis domainAxis = (NumberAxis) plot.getRangeAxis(); 254 NumberAxis domainAxis = (NumberAxis) plot.getRangeAxis(idx);
248 NumberAxis rangeAxis = (NumberAxis) plot.getDomainAxis();
249 255
250 Range domainRange = domainAxis.getRange(); 256 Range domainRange = domainAxis.getRange();
251 Range rangeRange = rangeAxis.getRange();
252 log.debug("Domain axis range before: " + domainRange.toString()); 257 log.debug("Domain axis range before: " + domainRange.toString());
253 log.debug("Range axis range before: " + rangeRange.toString());
254 258
255 domainRange = Range.expand(domainRange, LOWER_MARGIN, UPPER_MARGIN); 259 domainRange = Range.expand(domainRange, LOWER_MARGIN, UPPER_MARGIN);
256 rangeRange = Range.expand(rangeRange, LOWER_MARGIN, UPPER_MARGIN);
257 260
258 double lower = domainRange.getLowerBound(); 261 double lower = domainRange.getLowerBound();
259 double upper = domainRange.getUpperBound(); 262 double upper = domainRange.getUpperBound();
260 263
261 if (lower == upper) { 264 if (lower == upper) {
262 domainRange = new Range( 265 double lo = lower > 0 ? lower - lower*0.05d : lower + lower*0.05d;
263 lower - (lower * 0.05d), 266 double up = upper > 0 ? upper + upper*0.05d : upper - upper*0.05d;
264 upper + (upper * 0.05d)); 267
265 } 268 domainRange = new Range(lo, up);
266 269 }
267 log.debug("Domain axis range after: " + domainRange.toString()); 270
268 log.debug("Range axis range after: " + rangeRange.toString()); 271 log.debug("Range axis range after: " + domainRange.toString());
269 domainAxis.setRange(domainRange); 272 domainAxis.setRange(domainRange);
270 rangeAxis.setRange(rangeRange); 273 plot.setRangeAxis(idx, domainAxis);
271 274 }
272 plot.setRangeAxis(domainAxis); 275
273 } 276
274 277 /**
275 278 * Method to expand max range of a range axis.
276 /**
277 * Method to expand max range of a range axis identified by seriesKey.
278 * <code>LOWER_MARGIN</code> and <code>UPPER_MARGIN</code> are used to 279 * <code>LOWER_MARGIN</code> and <code>UPPER_MARGIN</code> are used to
279 * expand the range. 280 * expand the range.
280 *
281 * @param seriesKey Key to identify the series stored at the current
282 * Dataset.
283 * @param idx Currently not used.
284 */ 281 */
285 protected void prepareRangeAxis(String seriesKey, int idx) { 282 protected void prepareRangeAxis(String seriesKey, int idx) {
283 log.debug("Adjust domain range now...");
286 XYPlot plot = chart.getXYPlot(); 284 XYPlot plot = chart.getXYPlot();
287 NumberAxis xAxis = (NumberAxis) plot.getDomainAxis(); 285 NumberAxis yAxis = (NumberAxis) plot.getDomainAxis();
288 286
289 Range xRange = (Range) values.get(seriesKey); 287 Range yRange = yAxis.getRange();
290 xAxis.setRange(Range.expand(xRange, LOWER_MARGIN, UPPER_MARGIN)); 288 double lo = yRange.getLowerBound();
291 log.debug("Max X-Range of dataset is: " + xRange.toString()); 289 double hi = yRange.getUpperBound();
290
291 Iterator iter = values.values().iterator();
292 while (iter.hasNext()) {
293 Range tmp = (Range) iter.next();
294 log.debug("Series range: " + tmp.toString());
295
296 lo = lo < tmp.getLowerBound() ? lo : tmp.getLowerBound();
297 hi = hi > tmp.getUpperBound() ? hi : tmp.getUpperBound();
298 }
299
300 Range merged = Range.expand(
301 new Range(lo, hi),
302 LOWER_MARGIN, UPPER_MARGIN);
303 log.debug("Calculated range for all series = " + merged.toString());
304
305 yAxis.setRange(merged);
306 plot.setDomainAxis(yAxis);
292 } 307 }
293 308
294 309
295 /** 310 /**
296 * @see de.intevation.gnv.chart.AbstractXYLineChart#addValue(Result, Series) 311 * @see de.intevation.gnv.chart.AbstractXYLineChart#addValue(Result, Series)
357 linesVisible, 372 linesVisible,
358 shapesVisible 373 shapesVisible
359 ); 374 );
360 } 375 }
361 } 376 }
377
378 prepareRangeAxis(null, -1);
362 } 379 }
363 380
364 381
365 /** 382 /**
366 * Method used to store the max y-range of each parameter in this chart. 383 * Method used to store the max y-range of each parameter in this chart.

http://dive4elements.wald.intevation.org