Java 如何在Openstreetmap中突出显示地图标记点?

Java 如何在Openstreetmap中突出显示地图标记点?,java,swing,border,openstreetmap,jmapviewer,Java,Swing,Border,Openstreetmap,Jmapviewer,我使用来自的代码为我的swing应用程序创建并运行一个映射 我添加了一些MapMarkerDot以指示地图中的某些点,并用于标识是否已选择某个点,但如何实际显示已选择了特定的MapMarkerDot?我想添加一些类似的边界,但到目前为止我还没有看到成功 如有任何建议/参考,我们将不胜感激。谢谢 在MapMarkerCircle中MapMarkerDot的paint()的父实现忽略了样式中指定的笔划,但您可以扩展MapMarkerCircle以使用更大的半径并渲染任何内容。在下面的示例中,“更新”

我使用来自的代码为我的swing应用程序创建并运行一个映射

我添加了一些MapMarkerDot以指示地图中的某些点,并用于标识是否已选择某个点,但如何实际显示已选择了特定的MapMarkerDot?我想添加一些类似的边界,但到目前为止我还没有看到成功


如有任何建议/参考,我们将不胜感激。谢谢

MapMarkerCircle
MapMarkerDot
paint()
的父实现忽略了
样式中指定的
笔划
,但您可以扩展
MapMarkerCircle
以使用更大的
半径
并渲染任何内容。在下面的示例中,“更新”按钮侦听器显示了如何动态更改自定义标记的背景色


非常感谢。你真棒!我现在就试试:-)
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.util.Random;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import org.openstreetmap.gui.jmapviewer.Coordinate;
import org.openstreetmap.gui.jmapviewer.JMapViewer;
import org.openstreetmap.gui.jmapviewer.MapMarkerCircle;
import org.openstreetmap.gui.jmapviewer.MapMarkerDot;
import org.openstreetmap.gui.jmapviewer.Style;

/**
 * @see http://stackoverflow.com/a/33857113/230513
 */
public class London {

    private static final Random r = new Random();

    private void display() {
        JFrame f = new JFrame("London");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JMapViewer map = new JMapViewer() {

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(320, 240);
            }
        };
        Coordinate london = new Coordinate(51.5072, -0.1275);
        map.setDisplayPosition(london, 16);
        MyMarker dot = new MyMarker("", london);
        map.addMapMarker(dot);
        map.addMapMarker(new MapMarkerDot("London", london));
        f.add(map);
        f.add(new JButton(new AbstractAction("Update") {

            @Override
            public void actionPerformed(ActionEvent e) {
                Style style = dot.getStyle();
                style.setBackColor(Color.getHSBColor(r.nextFloat(), 1f, 1f));
                style.setColor(Color.red);
                map.repaint();
            }
        }), BorderLayout.SOUTH);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private static class MyMarker extends MapMarkerCircle {

        public MyMarker(String name, Coordinate coord) {
            super(null, name, coord, 12, STYLE.FIXED, getDefaultStyle());
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new London()::display);
    }
}