25 |
* |
* |
26 |
* Contributors: |
* Contributors: |
27 |
* Martin O. J. Schmitz - initial API and implementation |
* Martin O. J. Schmitz - initial API and implementation |
28 |
* Stefan A. Krüger - additional utility classes |
* Stefan A. Tzeggai - additional utility classes |
29 |
******************************************************************************/ |
******************************************************************************/ |
30 |
/** |
/** |
31 |
Copyright 2008 Stefan Alfons Krüger and parts from some Geotools code |
Copyright 2008 Stefan Alfons Tzeggai and parts from some Geotools code |
32 |
|
|
33 |
atlas-framework - This file is part of the Atlas Framework |
atlas-framework - This file is part of the Atlas Framework |
34 |
|
|
35 |
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. |
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. |
87 |
* <ul> |
* <ul> |
88 |
* <li>07.02.2008:<br> |
* <li>07.02.2008:<br> |
89 |
* Determining the default values of a {@link SimpleFeatureType} by |
* Determining the default values of a {@link SimpleFeatureType} by |
90 |
* {@link FeatureUtil#getDefaultAttributeValues(SimpleFeatureType)} instead of using |
* {@link FeatureUtil#getDefaultAttributeValues(SimpleFeatureType)} instead of |
91 |
* {@link AttributeDescriptor#createDefaultValue()} directly, because the latter |
* using {@link AttributeDescriptor#createDefaultValue()} directly, because the |
92 |
* returns {@code null} even though the attribut is not nillable.</li> |
* latter returns {@code null} even though the attribut is not nillable.</li> |
93 |
* </ul> |
* </ul> |
94 |
* |
* |
95 |
* @author Stefan Alfons Krüger |
* @author Stefan Alfons Tzeggai |
96 |
*/ |
*/ |
97 |
public class LegendIconFeatureRenderer extends DefaultTreeCellRenderer { |
public class LegendIconFeatureRenderer extends DefaultTreeCellRenderer { |
98 |
// private static final Dimension SIZE = new Dimension(30,20); |
// private static final Dimension SIZE = new Dimension(30,20); |
99 |
|
|
100 |
Logger LOGGER = Logger.getLogger(LegendIconFeatureRenderer.class); |
Logger LOGGER = Logger.getLogger(LegendIconFeatureRenderer.class); |
101 |
|
|
109 |
|
|
110 |
public static LegendIconFeatureRenderer getInstance() { |
public static LegendIconFeatureRenderer getInstance() { |
111 |
// In GT 2.4.5 it we have to create a new one all the time! |
// In GT 2.4.5 it we have to create a new one all the time! |
112 |
|
|
113 |
// TODO TEST, whether we still need to recreate the renderer here.... |
// TODO TEST, whether we still need to recreate the renderer here.... |
114 |
// TODO TEST, whether we still need to recreate the renderer here.... |
// TODO TEST, whether we still need to recreate the renderer here.... |
115 |
// TODO TEST, whether we still need to recreate the renderer here.... |
// TODO TEST, whether we still need to recreate the renderer here.... |
119 |
// TODO TEST, whether we still need to recreate the renderer here.... |
// TODO TEST, whether we still need to recreate the renderer here.... |
120 |
// TODO TEST, whether we still need to recreate the renderer here.... |
// TODO TEST, whether we still need to recreate the renderer here.... |
121 |
return new LegendIconFeatureRenderer(); |
return new LegendIconFeatureRenderer(); |
122 |
// return instance; |
// return instance; |
123 |
} |
} |
124 |
|
|
125 |
/** |
/** |
222 |
legendHeight / 2); |
legendHeight / 2); |
223 |
|
|
224 |
try { |
try { |
225 |
this.samplePoint = new LiteShape2(geomFac |
this.samplePoint = new LiteShape2( |
226 |
.createPoint(coord), null, null, false); |
geomFac.createPoint(coord), null, null, false); |
227 |
} catch (Exception e) { |
} catch (Exception e) { |
228 |
this.samplePoint = null; |
this.samplePoint = null; |
229 |
} |
} |
236 |
} |
} |
237 |
return sampleShape; |
return sampleShape; |
238 |
} |
} |
239 |
|
|
240 |
/** |
/** |
241 |
* Creates a little BufferedImage that presents the Style/Symbols used by |
* Creates a little BufferedImage that presents the Style/Symbols used by |
242 |
* the {@link MapLegend} to show a legend for the {@link SimpleFeatureType} |
* the {@link MapLegend} to show a legend for the {@link SimpleFeatureType} |
244 |
* @param rule |
* @param rule |
245 |
* {@link Rule} that provides the text and the style to present |
* {@link Rule} that provides the text and the style to present |
246 |
* @param featureType |
* @param featureType |
247 |
* Schema that describes the kind of the sample {@link SimpleFeature} |
* Schema that describes the kind of the sample |
248 |
* that will be rendered with the {@link Style} |
* {@link SimpleFeature} that will be rendered with the |
249 |
|
* {@link Style} |
250 |
* @param bg |
* @param bg |
251 |
* Background {@link Color} or <code>null</code> |
* Background {@link Color} or <code>null</code> |
252 |
* |
* |
253 |
* @throws IllegalAttributeException |
* @throws IllegalAttributeException |
254 |
*/ |
*/ |
255 |
public BufferedImage createImageForRule(Rule rule, SimpleFeatureType featureType, |
public BufferedImage createImageForRule(Rule rule, |
256 |
Dimension size, Color bg) { |
SimpleFeatureType featureType, Dimension size, Color bg) { |
257 |
|
|
258 |
Symbolizer[] symbolizers = rule.getSymbolizers(); |
Symbolizer[] symbolizers = rule.getSymbolizers(); |
259 |
|
|
263 |
|
|
264 |
if (bg != null) { |
if (bg != null) { |
265 |
// **************************************************************************** |
// **************************************************************************** |
266 |
// The following lines define the backgroup color for the rendered |
// The following lines define the background color for the rendered |
267 |
// images |
// images |
268 |
// **************************************************************************** |
// **************************************************************************** |
269 |
graphics.setBackground(bg); |
graphics.setBackground(bg); |
274 |
// Enable anti-aliasing for the legend symbols |
// Enable anti-aliasing for the legend symbols |
275 |
graphics.setRenderingHints(getHints()); |
graphics.setRenderingHints(getHints()); |
276 |
|
|
277 |
// TODO scaleDenominator = 100000000000000000000000000000d; Was ist das |
final NumberRange<Integer> scaleRange = NumberRange.create( |
278 |
// fuer ein Quatsch? |
Integer.MAX_VALUE, Integer.MAX_VALUE); |
|
final NumberRange<Integer> scaleRange = NumberRange.create(Integer.MAX_VALUE,Integer.MAX_VALUE); |
|
279 |
|
|
280 |
try { |
try { |
281 |
|
|
283 |
Symbolizer symbolizer = symbolizers[sIdx]; |
Symbolizer symbolizer = symbolizers[sIdx]; |
284 |
|
|
285 |
if (symbolizer instanceof TextSymbolizer) { |
if (symbolizer instanceof TextSymbolizer) { |
|
LOGGER |
|
|
.warn("createImageForRule for a TextSymbolizer. Sure we want that?"); |
|
286 |
continue; |
continue; |
287 |
} |
} |
288 |
|
|
291 |
// RasterSymbolizers.."); |
// RasterSymbolizers.."); |
292 |
// } |
// } |
293 |
// else |
// else |
294 |
final SimpleFeature sampleFeature = FeatureUtil.createSampleFeature(featureType); |
final SimpleFeature sampleFeature = FeatureUtil |
295 |
|
.createSampleFeature(featureType); |
296 |
|
|
297 |
|
if (sampleFeature == null) |
298 |
|
LOGGER.debug("sampleFeature " + sampleFeature); |
299 |
|
|
300 |
// The SLDStyleFactory has to be recreated, as it seams to cache |
// The SLDStyleFactory has to be recreated, as it seams to cache |
301 |
// some stuff. |
// some stuff. |
307 |
size.height); |
size.height); |
308 |
|
|
309 |
if (style2d != null) { |
if (style2d != null) { |
310 |
new StyledShapePainter(null).paint(graphics, shape, |
StyledShapePainter styledShapePainter = new StyledShapePainter(null); |
311 |
style2d, Integer.MAX_VALUE ); |
styledShapePainter.paint(graphics, shape, |
312 |
|
style2d, Integer.MAX_VALUE); |
313 |
} |
} |
314 |
} |
} |
315 |
} catch (Exception e) { |
} catch (Exception e) { |
316 |
LOGGER |
LOGGER.error( |
317 |
.error( |
"Error during createImageForRule, returning empty Image", e); |
|
"Error during createImageForRule, returning empty Image", |
|
|
e); |
|
318 |
} |
} |
319 |
return buffImage; |
return buffImage; |
320 |
} |
} |
323 |
* Define Java2D and other Hints |
* Define Java2D and other Hints |
324 |
* |
* |
325 |
* @param hints |
* @param hints |
326 |
* @author <a href="mailto:[email protected]">Stefan Alfons |
* @author <a href="mailto:[email protected]">Stefan Alfons Tzeggai</a> |
|
* Krüger</a> |
|
327 |
*/ |
*/ |
328 |
public void setHints(Hints hints) { |
public void setHints(Hints hints) { |
329 |
getHints().add(hints); |
getHints().add(hints); |
353 |
* @param rule |
* @param rule |
354 |
* {@link Rule} that provides the text and the style to present |
* {@link Rule} that provides the text and the style to present |
355 |
* @param featureType |
* @param featureType |
356 |
* Schema that describes the kind of the sample {@link SimpleFeature} |
* Schema that describes the kind of the sample |
357 |
* that will be rendered with the {@link Style} |
* {@link SimpleFeature} that will be rendered with the |
358 |
|
* {@link Style} |
359 |
* |
* |
360 |
* @throws IllegalAttributeException |
* @throws IllegalAttributeException |
361 |
*/ |
*/ |