我必须使用osmdriod maps 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();
}
现在发生的事情是,当当前位置变化如here,here时,当广播接收器被调用时,当前位置标记会一个接一个地添加。
我只想要一个当前位置标记,并且两个标记之间应该存在单个多边形线,这些标记会更新。
答案 0 :(得分:0)
mMapView.getOverlayManager().clear()
怎么样?
基本上,osmdroid没有更新方法。您需要删除旧标记并将新标记添加到地图视图中。
答案 1 :(得分:0)
如果您在每次更新时添加标记和折线,则API会按要求执行:添加它们。
2种解决方案,具体取决于您的具体情况:
1)如果你总是有一个标记和折线显示=&gt;在开头只将它们添加到MapView一次。然后,在更新时,只需更新它们(并使mapview无效)。但是不要一次又一次地添加它们。
2)如果叠加列表在每次更新时都会发生变化(n Markers,m Polylines):按照间谍的建议,删除所有叠加层,然后重新创建它们。 使用FolderOverlay可以非常有助于安全地管理此操作(如果您有其他要始终保留的叠加层)。