/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available 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.Map;
import org.geoserver.wms.WMSMapContent;
public class ScaleRatioDecoration implements MapDecoration {
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 double getScale(WMSMapContent mapContent) {
return mapContent.getScaleDenominator(true);
}
public String getScaleText(WMSMapContent mapContent) {
return String.format("1 : %0$1.0f", getScale(mapContent));
}
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);
}
}