2016-08-08 7 views
0

ユーザーが地図をクリックするたびに地図にウェイポイントを追加したい。ユーザーがクリックするたびにウェイポイントを取得しましたが、以前のウェイポイントが消えてマップに表示されない問題は、現在のクリックによって描画されたワイプだけが表示されます。次はウェイポイントのコードです。ユーザーが地図をクリックするたびに地図(OSM)にマーカー(ウェイポイント)を追加するにはどうすればよいですか?

public class MapPanel { 

public static void acc(GeoPosition loc){ 
    MapPanel.drawNew(loc); 
} 

public static void drawNew(GeoPosition location){ 

    GeoPosition fp = new GeoPosition(location.getLatitude(),location.getLongitude()); 
    List<GeoPosition> track = Arrays.asList(fp); 

//  Create waypoints from the geo-positions 
    Set<Waypoint> waypoints = new HashSet<Waypoint>(Arrays.asList(
      new DefaultWaypoint(fp))); 
//  Create a waypoint painter that takes all the waypoints 
    waypointPainter.setWaypoints(waypoints); 
//  Create a compound painter that uses both the route-painter and the waypoint-painter 
    List<org.jxmapviewer.painter.Painter<org.jxmapviewer.JXMapViewer>> painters = new ArrayList<org.jxmapviewer.painter.Painter<org.jxmapviewer.JXMapViewer>>(); 
    painters.add(waypointPainter); 
    CompoundPainter<org.jxmapviewer.JXMapViewer> painter = new CompoundPainter<org.jxmapviewer.JXMapViewer>(painters); 
    frameWork.mapViewer.setOverlayPainter(painter); 

} 
public static void main (String args) { 
    frame.setContentPane(frameWork.mainPanel); 

    // Create a TileFactoryInfo for OpenStreetMap 
    TileFactoryInfo info = new OSMTileFactoryInfo(); 
    DefaultTileFactory tileFactory = new DefaultTileFactory(info); 
    frameWork.mapViewer.setTileFactory(tileFactory); 

    // Set the Default Location 
    GeoPosition chemnitz = new GeoPosition(50.833333, 12.916667); 

    //Set the focus 
    frameWork.mapViewer.setZoom(1); 
    frameWork.mapViewer.setAddressLocation(chemnitz); 

    // Add interactions 
    MouseInputListener mia = new PanMouseInputListener(frameWork.mapViewer); 

    frameWork.mapViewer.addMouseListener(mia); 
    frameWork.mapViewer.addMouseMotionListener(mia); 
    frameWork.mapViewer.addMouseListener(new CenterMapListener(frameWork.mapViewer)); 
    frameWork.mapViewer.addMouseWheelListener(new ZoomMouseWheelListenerCenter(frameWork.mapViewer)); 
    frameWork.mapViewer.addKeyListener(new PanKeyListener(frameWork.mapViewer)); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //frame.pack(); 
    frame.setSize(900, 600); 
    frame.setVisible(true); 


} 
} 

答えて

0

完全なソースコードなしで私が唯一の問題は 1 - あなたはウェイポイントを保存するために使用しているモデルでのいずれかであると仮定することができますことを確認してください新しいクリックされたポイントはによって上書きされていないモデルに追加されます最後の1つ(選択したウェイポイントのサイズを確認してください) または 2使用しているビューは、追加イベントごとに完全に再描画されます。最後に描画された要素の前にすべての要素が失われます。

+0

私はコードを編集しました。再チェックしてください。 –

+0

残念ですが、コードが不完全です。私があなたに言ったチェックをしようとしました。クリックした場所がすべてモデルに保存されていることを確認してくださいあなたが地図をクリックすると何が通知されるオブジェクトであるか) – whyn0t

+0

私は理解できますが、私はこの時点で固まっていますdrawNewメソッドは地図上にウェイポイントを描画しますが、マップ上に以前のウェイポイントを表示していない理由。以前のウェイポイントを表示できるように、drawNewメソッドでどのような変更を加えましたか? –

関連する問題