/** * New legend renderer with default legend options */ public Legends() { opts = new LegendOptions(); builder = new LegendBuilder( opts ); }
public StandardLegendItem( LinkedList<Styling> stylings, Continuation<LinkedList<Symbolizer<?>>> rule, Class<?> ruleType, String text, Renderer renderer, TextRenderer textRenderer ) { this.text = text; this.renderer = new StandardLegendRenderer( ruleType, stylings, text, renderer, textRenderer, rule ); }
/** * @param opts */ public Legends( LegendOptions opts ) { this.opts = opts; builder = new LegendBuilder( opts ); }
Pair<Integer, Integer> getLegendSize( Style style ) { Pair<Integer, Integer> res = legendSizes.get( style ); if ( res != null ) { return res; } legendSizes.put( style, res = new Legends().getLegendSize( style ) ); return res; }
BufferedImage getLegend( GetLegendGraphic req ) { Legends renderer = new Legends( req.getLegendOptions() ); Style style = findLegendStyle( req.getLayer(), req.getStyle() ); Pair<Integer, Integer> size; if ( renderer.getLegendOptions().isDefault() ) { size = getLegendSize( style ); } else { size = renderer.getLegendSize( style ); } if ( req.getWidth() == -1 ) { req.setWidth( size.first ); } if ( req.getHeight() == -1 ) { req.setHeight( size.second ); } boolean originalSize = req.getWidth() == size.first && req.getHeight() == size.second && renderer.getLegendOptions().isDefault(); HashMap<String, BufferedImage> legendMap = legends.get( style ); if ( originalSize && legendMap != null && legendMap.get( req.getFormat() ) != null ) { return legendMap.get( req.getFormat() ); } if ( legendMap == null ) { legendMap = new HashMap<String, BufferedImage>(); legends.put( style, legendMap ); } return buildLegend( req, renderer, style, originalSize, legendMap ); }
Legends legends = new Legends(); Pair<Integer, Integer> legendSize = legends.getLegendSize( parsedStyle ); BufferedImage img = new BufferedImage( legendSize.first, legendSize.second, BufferedImage.TYPE_INT_ARGB ); Graphics2D g = img.createGraphics(); g.setRenderingHint( KEY_ANTIALIASING, VALUE_ANTIALIAS_ON ); g.setRenderingHint( KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON ); legends.paintLegend( parsedStyle, legendSize.first, legendSize.second, g ); g.dispose();
List<LegendItem> items = prepareLegend( style, g, width, height ); int rowHeight = 2 * opts.spacing + opts.baseHeight; int pos = getLegendSize( style ).second; item.paint( pos, opts ); pos -= rowHeight * item.getHeight();
/ 2, mapcs ); } else if ( isLine ) { geom = getLegendLine( opts.spacing, origin - opts.spacing, opts.baseWidth, opts.baseHeight ); } else { geom = getLegendRect( opts.spacing, origin - opts.spacing, opts.baseWidth, opts.baseHeight ); paintLegendText( origin, opts, text, textRenderer ); paintRule( isPoint, maxSize, opts, geom );
for ( LegendItem item : LegendItemBuilder.prepareLegend( style, null, null, null ) ) { res.second += item.getHeight() * ( 2 * opts.spacing + opts.baseHeight ); res.first = max( res.first, item.getMaxWidth( opts ) );
paintLegendText( origin, opts, text, textRenderer ); origin -= opts.baseHeight + 2 * opts.spacing; LinkedList<Styling> list = new LinkedList<Styling>(); list.add( s ); StandardLegendItem item = new StandardLegendItem( list, null, Polygon.class, texts.next(), renderer, textRenderer ); item.paint( origin, opts ); origin -= opts.baseHeight + 2 * opts.spacing;
List<LegendItem> prepareLegend( Style style, Graphics2D g, int width, int height ) { Pair<Integer, Integer> p = getLegendSize( style ); Envelope box = geofac.createEnvelope( 0, 0, p.first, p.second, null ); Java2DRenderer renderer = new Java2DRenderer( g, width, height, box ); Java2DTextRenderer textRenderer = new Java2DTextRenderer( renderer ); Java2DRasterRenderer rasterRenderer = new Java2DRasterRenderer( g, width, height, box ); return LegendItemBuilder.prepareLegend( style, renderer, textRenderer, rasterRenderer ); }
static List<LegendItem> prepareLegend( Style style, Java2DRenderer renderer, Java2DTextRenderer textRenderer, Java2DRasterRenderer rasterRenderer ) { List<LegendItem> items = new LinkedList<LegendItem>(); LinkedList<Class<?>> ruleTypes = style.getRuleTypes(); Iterator<Class<?>> types = ruleTypes.iterator(); LinkedList<String> ruleTitles = style.getRuleTitles(); Iterator<String> titles = ruleTitles.iterator(); LinkedList<Pair<Continuation<LinkedList<Symbolizer<?>>>, DoublePair>> rules; rules = new LinkedList<Pair<Continuation<LinkedList<Symbolizer<?>>>, DoublePair>>( style.getRules() ); Iterator<Pair<Continuation<LinkedList<Symbolizer<?>>>, DoublePair>> ruleIterator = rules.iterator(); ArrayList<LinkedList<Styling>> bases = style.getBases(); for ( LinkedList<Styling> styles : bases ) { boolean raster = false; for ( Styling s : styles ) { if ( s instanceof RasterStyling ) { items.add( new RasterLegendItem( (RasterStyling) s, renderer, rasterRenderer, textRenderer ) ); raster = true; } } if ( !raster ) { LegendItem item = new StandardLegendItem( styles, ruleIterator.next().first, types.next(), titles.next(), renderer, textRenderer ); items.add( item ); } } return items; }
private BufferedImage buildLegend( GetLegendGraphic req, Legends renderer, Style style, boolean originalSize, HashMap<String, BufferedImage> legendMap ) { BufferedImage img = MapService.prepareImage( req ); Graphics2D g = img.createGraphics(); g.setRenderingHint( KEY_ANTIALIASING, VALUE_ANTIALIAS_ON ); g.setRenderingHint( KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON ); renderer.paintLegend( style, req.getWidth(), req.getHeight(), g ); g.dispose(); if ( req.getFormat().equals( "image/png; mode=8bit" ) || req.getFormat().equals( "image/png; subtype=8bit" ) || req.getFormat().equals( "image/gif" ) ) { img = postprocessPng8bit( img ); } if ( originalSize ) { legendMap.put( req.getFormat(), img ); } return img; }
@Override public void paint( int origin, LegendOptions opts ) { renderer.paint( origin, opts ); }
@Override public void paint( int origin, LegendOptions opts ) { renderer.paint( origin, opts ); }
public List<LegendItem> prepareLegend( Style style, Graphics2D g, int width, int height ) { return builder.prepareLegend( style, g, width, height ); }
public Pair<Integer, Integer> getLegendSize( Style style ) { return builder.getLegendSize( style ); }
public RasterLegendItem( RasterStyling styling, Renderer renderer, RasterRenderer rasterRenderer, TextRenderer textRenderer ) { this.styling = styling; if ( styling.interpolate != null ) { for ( Double d : styling.interpolate.getDatas() ) { texts.add( d.toString() ); } } if ( styling.categorize != null ) { Float[] values = styling.categorize.getThreshholds(); boolean prec = styling.categorize.getPrecedingBelongs(); texts.add( ( prec ? "< " : "<= " ) + values[0] ); for ( int i = 0; i < values.length - 1; ++i ) { texts.add( values[i] + ( prec ? " < " : " <= " ) + values[i + 1] ); } texts.add( ( prec ? ">= " : "> " ) + values[values.length - 1] ); } this.renderer = new RasterLegendRenderer( styling, renderer, rasterRenderer, textRenderer, texts ); }
private void writeStyles( final XMLStreamWriter writer, final String name, final Map<String, Style> legends, final Map<String, Style> styles ) throws XMLStreamException { if ( styleWriter != null ) { for ( final Entry<String, Style> e : styles.entrySet() ) { if ( e.getKey() == null || e.getKey().isEmpty() ) { continue; } Style ls = e.getValue(); if ( legends.get( e.getKey() ) != null ) { ls = legends.get( e.getKey() ); } final Pair<Integer, Integer> p = new Legends().getLegendSize( ls ); styleWriter.writeStyle( writer, e.getKey(), e.getKey(), p, name, e.getValue() ); } } }
private void writeStyles( final XMLStreamWriter writer, final String name, final Map<String, Style> legends, final Map<String, Style> styles ) throws XMLStreamException { if ( styleWriter != null ) { for ( final Entry<String, Style> e : styles.entrySet() ) { if ( e.getKey() == null || e.getKey().isEmpty() ) { continue; } Style ls = e.getValue(); if ( legends.get( e.getKey() ) != null ) { ls = legends.get( e.getKey() ); } final Pair<Integer, Integer> p = new Legends().getLegendSize( ls ); styleWriter.writeStyle( writer, e.getKey(), e.getKey(), p, name, e.getValue() ); } } }