2016-10-19 9 views
0

Мне нужно сделать навигацию с использованием osmdriod maps api. Активность принимает широковещательные от службы определения местоположения, используя следующий приемник:Osmdroid marker обновить

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

Теперь то, что происходит в том, что текущие маркеры положения становятся добавлены один над другим, как и когда вызывается широковещательный приемник при изменении текущей позиции, например here, here.

Мне нужен только один маркер текущей позиции, и одна единственная поли линия должна присутствовать между 2-мя маркерами, которые обновляются.

+0

Удалить из списка обновлений? – 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 ("Текущее положение" + лат + "" + lon); mMapView.getOverlays(). Add (endMarker); pts.add (gPt1); pl.setPoints (pts); pl.setGeodesic (true); mMapView.getOverlayManager(). Add (pl); mMapView.invalidate(); } ' – Ghanendra

 Смежные вопросы

  • Нет связанных вопросов^_^