Osmdroid标记没有更新

时间:2016-10-19 12:54:16

标签: android openstreetmap osmdroid

我必须使用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();
}

现在发生的事情是,当当前位置变化如herehere时,当广播接收器被调用时,当前位置标记会一个接一个地添加。

我只想要一个当前位置标记,并且两个标记之间应该存在单个多边形线,这些标记会更新。

2 个答案:

答案 0 :(得分:0)

mMapView.getOverlayManager().clear()怎么样?

基本上,osmdroid没有更新方法。您需要删除旧标记并将新标记添加到地图视图中。

答案 1 :(得分:0)

如果您在每次更新时添加标记和折线,则API会按要求执行:添加它们。

2种解决方案,具体取决于您的具体情况:

1)如果你总是有一个标记和折线显示=&gt;在开头只将它们添加到MapView一次。然后,在更新时,只需更新它们(并使mapview无效)。但是不要一次又一次地添加它们。

2)如果叠加列表在每次更新时都会发生变化(n Markers,m Polylines):按照间谍的建议,删除所有叠加层,然后重新创建它们。 使用FolderOverlay可以非常有助于安全地管理此操作(如果您有其他要始终保留的叠加层)。