/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, availible at the root * application directory. */ package org.geoserver.wms.decoration; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Stroke; import java.awt.geom.Rectangle2D; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; import org.geoserver.wms.WMSMapContent; import org.geotools.renderer.lite.RendererUtilities; public class ScaleRatioDecoration implements MapDecoration { /** A logger for this class. */ private static final Logger LOGGER = org.geotools.util.logging.Logging.getLogger("org.geoserver.wms.responses"); public void loadOptions(Map<String, String> options) { } public Dimension findOptimalSize(Graphics2D g2d, WMSMapContent mapContent){ FontMetrics metrics = g2d.getFontMetrics(g2d.getFont()); return new Dimension(metrics.stringWidth(getScaleText(mapContent)), metrics.getHeight()); } public String getScaleText(WMSMapContent mapContent) { return String.format( "1 : %0$1.0f", RendererUtilities.calculateOGCScale( mapContent.getRenderingArea(), mapContent.getRequest().getWidth(), new HashMap() ) ); } public void paint(Graphics2D g2d, Rectangle paintArea, WMSMapContent mapContent) throws Exception { FontMetrics metrics = g2d.getFontMetrics(g2d.getFont()); Dimension d = new Dimension(metrics.stringWidth(getScaleText(mapContent)), metrics.getHeight()); Color oldColor = g2d.getColor(); Stroke oldStroke = g2d.getStroke(); float x = (float)(paintArea.getMinX() + (paintArea.getWidth() - d.getWidth()) / 2.0); float y = (float)(paintArea.getMaxY() - (paintArea.getHeight() - d.getHeight()) / 2.0); Rectangle2D bgRect = new Rectangle2D.Double( x - 3.0, y - d.getHeight(), d.getWidth() + 6.0, d.getHeight() + 6.0 ); g2d.setColor(Color.WHITE); g2d.fill(bgRect); g2d.setColor(Color.BLACK); g2d.setStroke(new BasicStroke(1)); g2d.drawString(getScaleText(mapContent), x, y); g2d.draw(bgRect); g2d.setColor(oldColor); g2d.setStroke(oldStroke); } }