Mercurial > dive4elements > gnv-client
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. |