我必须使用osmdriod映射api来实现导航。该活动使用以下接收器接收来自位置服务的广播:
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();
}现在发生的情况是,当当前位置发生变化(如这里、这里 )时,当广播接收器被调用时,当前位置标记将被添加到另一个位置上。
我只想要一个单一的当前位置标记和一个单一的多线之间的两个标记,这将得到更新。
发布于 2016-10-22 18:36:12
如果您在每次更新中添加了一个标记和Polyline,API会按照请求执行:添加它们。
2解决方案,视您的情况而定:
1)如果您总是有一个标记和一个折线来显示=>,那么在开始时只将它们添加到MapView中一次。然后,在更新时,只需更新它们(并使mapview失效)。但不要一次又一次地加起来。
2)如果覆盖列表在每次更新时都可能发生变化(n个标记,m折线):按照间谍的建议,删除所有覆盖,并重新创建它们。使用FolderOverlay可以非常有助于安全地管理此操作(如果您有其他希望一直保持的覆盖)。
发布于 2016-10-20 22:30:12
mMapView.getOverlayManager().clear()怎么样?
实际上,对osmdroid没有更新方法。您需要删除您的旧标记,并添加一个新的地图视图。
https://stackoverflow.com/questions/40131987
复制相似问题