// License: GPL. For details, see Readme.txt file. package org.openstreetmap.gui.jmapviewer; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import org.openstreetmap.gui.jmapviewer.interfaces.MapMarker; /** * A simple implementation of the {@link MapMarker} interface. Each map marker * is painted as a circle with a black border line and filled with a specified * color. * * @author Jan Peter Stotz * */ public class MapMarkerCircle extends MapObjectImpl implements MapMarker { private Coordinate coord; private double radius; private STYLE markerStyle; /** * Constructs a new {@code MapMarkerCircle}. * @param coord Coordinates of the map marker * @param radius Radius of the map marker position */ public MapMarkerCircle(Coordinate coord, double radius) { this(null, null, coord, radius); } /** * Constructs a new {@code MapMarkerCircle}. * @param name Name of the map marker * @param coord Coordinates of the map marker * @param radius Radius of the map marker position */ public MapMarkerCircle(String name, Coordinate coord, double radius) { this(null, name, coord, radius); } /** * Constructs a new {@code MapMarkerCircle}. * @param layer Layer of the map marker * @param coord Coordinates of the map marker * @param radius Radius of the map marker position */ public MapMarkerCircle(Layer layer, Coordinate coord, double radius) { this(layer, null, coord, radius); } /** * Constructs a new {@code MapMarkerCircle}. * @param lat Latitude of the map marker * @param lon Longitude of the map marker * @param radius Radius of the map marker position */ public MapMarkerCircle(double lat, double lon, double radius) { this(null, null, new Coordinate(lat, lon), radius); } /** * Constructs a new {@code MapMarkerCircle}. * @param layer Layer of the map marker * @param lat Latitude of the map marker * @param lon Longitude of the map marker * @param radius Radius of the map marker position */ public MapMarkerCircle(Layer layer, double lat, double lon, double radius) { this(layer, null, new Coordinate(lat, lon), radius); } /** * Constructs a new {@code MapMarkerCircle}. * @param layer Layer of the map marker * @param name Name of the map marker * @param coord Coordinates of the map marker * @param radius Radius of the map marker position */ public MapMarkerCircle(Layer layer, String name, Coordinate coord, double radius) { this(layer, name, coord, radius, STYLE.VARIABLE, getDefaultStyle()); } /** * Constructs a new {@code MapMarkerCircle}. * @param layer Layer of the map marker * @param name Name of the map marker * @param coord Coordinates of the map marker * @param radius Radius of the map marker position * @param markerStyle Marker style (fixed or variable) * @param style Graphical style */ public MapMarkerCircle(Layer layer, String name, Coordinate coord, double radius, STYLE markerStyle, Style style) { super(layer, name, style); this.markerStyle = markerStyle; this.coord = coord; this.radius = radius; } @Override public Coordinate getCoordinate() { return coord; } @Override public double getLat() { return coord.getLat(); } @Override public double getLon() { return coord.getLon(); } @Override public double getRadius() { return radius; } @Override public STYLE getMarkerStyle() { return markerStyle; } @Override public void paint(Graphics g, Point position, int radius) { int sizeH = radius; int size = sizeH * 2; if (g instanceof Graphics2D && getBackColor() != null) { Graphics2D g2 = (Graphics2D) g; Composite oldComposite = g2.getComposite(); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); g2.setPaint(getBackColor()); g.fillOval(position.x - sizeH, position.y - sizeH, size, size); g2.setComposite(oldComposite); } g.setColor(getColor()); g.drawOval(position.x - sizeH, position.y - sizeH, size, size); if (getLayer() == null || getLayer().isVisibleTexts()) paintText(g, position); } public static Style getDefaultStyle() { return new Style(Color.ORANGE, new Color(200, 200, 200, 200), null, getDefaultFont()); } @Override public String toString() { return "MapMarker at " + getLat() + ' ' + getLon(); } @Override public void setLat(double lat) { if (coord == null) coord = new Coordinate(lat, 0); else coord.setLat(lat); } @Override public void setLon(double lon) { if (coord == null) coord = new Coordinate(0, lon); else coord.setLon(lon); } }