我创建了一个MouseInputAdapter侦听器,以获取JMapViewer地图中的坐标并在该位置创建MapMarker,但是即使单击其他位置,map.getPossition()方法的值也不会使用新值进行更新。

我的听众代码:

@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1){
    Coordinate markeradd = map.getPosition();
    System.out.println(map.getPosition());
    map.addMapMarker(new MapMarkerDot(markeradd));
}


在那里,system.out.print用于打印由getPosition()返回的值。
第一次单击时,我会得到一组坐标,然后无论单击何处,都将始终获得相同的坐标。
五个不同排名点击的示例:

Coordinate[56.159963018590744, 10.199775695800781]
Coordinate[56.159963018590744, 10.199775695800781]
Coordinate[56.159963018590744, 10.199775695800781]
Coordinate[56.159963018590744, 10.199775695800781]
Coordinate[56.159963018590744, 10.199775695800781]

最佳答案

如您所见,getPosition()“计算当前显示的地图区域中心的纬度/经度坐标”。你可能想要

Coordinate getPosition(java.awt.Point mapPoint)


其中“将相对像素坐标…转换为纬度/经度坐标”。您可以在JMapController的实现中调用它,如here所示的DefaultMapController子类。

new DefaultMapController(map) {

    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println(map.getPosition(e.getPoint()));
    }
};

10-05 18:23