如何在Openstreetmap中突出显示MapMarkerDot?

我使用http://svn.openstreetmap.org/applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/Demo.java中的代码来获取我的swing应用程序的地图并运行。

我添加了一些MapMarkerDot来指示我的地图中的一些点,并使用我如何从我的JMapViewer世界地图中获取鼠标点击位置以确定是否已经选择了一个点,但我如何才能真正显示已选择特定的MapMarkerDot? 我想添加一些类似于http://bikes.oobrien.com/london/#zoom=14&lon=-0.1155&lat=51.4992的边框,但到目前为止我还没有看到成功。

任何建议/参考都很受欢迎。 谢谢!

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

图片

 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); } }