2016-10-19 13 views
0

osmdriod maps apiを使用してナビゲーションを実装する必要があります。活性は、以下の受信機を使用して、ロケーションサービスから放送を受信する。続いOsmdroidマーカーが更新されない

public class ReceiveMessages extends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String lat = intent.getStringExtra("Latitude"); 
     String lon = intent.getStringExtra("Longitude"); 
     System.out.println("on recieve called "+lat+lon); 
     updateUi(Double.parseDouble(lat),Double.parseDouble(lon)); 
    } 
} 

はのupdateUI方法であって、

public void updateUi(Double lat,Double lon) { 
    gPt1 = new GeoPoint(lat, lon); 
    Marker endMarker = new Marker(mMapView); 
    endMarker.setPosition(gPt1); 
    endMarker.setTitle("Current Position"+lat+" "+lon); 
    mMapView.getOverlays().add(endMarker); 

    Polyline pl = new Polyline(); 
    pl.setWidth(5f); 
    pl.setColor(Color.RED); 
    List<GeoPoint> pts = new ArrayList<>(); 
    pts.add(gPt0); 
    pts.add(gPt1); 
    pl.setPoints(pts); 
    pl.setGeodesic(true); 
    mMapView.getOverlayManager().add(pl); 
    mMapView.invalidate(); 
} 

起こっている現在の位置マーカーとしてつの他の上に追加取得されていることですherehereのように現在の位置が変化したときに放送受信機が呼び出されると、

ただ1つの現在の位置マーカーが必要で、更新される2つのマーカーの間に1本のポリラインが存在する必要があります。

+0

更新プログラムの1つを削除しますか? – spy

答えて

0

各更新時にマーカーとポリラインを追加すると、APIが要求通りに機能します。追加されます。

2つのソリューションは、あなたのコンテキストに応じて:

1)あなたはいつも=>は冒頭で、一度だけのMapViewに追加表示するためのマーカーやポリラインを持っている場合。その後、更新されると、それらを更新するだけで(マップビューを無効にする)。しかし、それらを何度も何度も加えないでください。

2)各更新時にオーバーレイのリストが変更される場合があります(nマーカー、mポリライン):スパイの提案に従って、すべてのオーバーレイを削除して再作成します。 FolderOverlayを使用すると、この操作を安全に管理できます(常に保持したい他のオーバーレイがある場合)。

0

mMapView.getOverlayManager().clear()

本質的に、osmdroidの更新方法はありません。古いマーカーを削除し、新しいマーカーをマップビューに追加する必要があります。

+0

ありがとう、私はupdateUiを変更して解決できました 'public void updateUi(Double lat、Double lon){ pts.clear(); pts.add(gPt0); gPt1 =新しいGeoPoint(lat、lon); endMarker.setPosition(gPt1); mMapView.invalidate(); mMapController.setCenter(gPt1); endMarker.setTitle( "現在の位置" + lat + "" + lon);mMapView.getOverlays()。add(endMarker); pts.add(gPt1); pl.setPoints(pts); pl.setGeodesic(true);mMapView.getOverlayManager()。add(pl); mMapView.invalidate(); } ' – Ghanendra

関連する問題