Osmdroid 标记未更新

Osmdroid marker not updating

我必须使用 osmdriod 地图进行工具导航 api。 Activity 使用以下接收器从位置服务接收广播:

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 个标记之间应该存在一条多边形线,这会得到更新。

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

osmdroid本质上是没有更新方法的。您需要删除旧标记并在地图视图中添加一个新标记。

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

2 个解决方案,具体取决于您的上下文:

1) 如果您总是要显示一个标记和一条多段线 => 仅在开始时将它们添加到 MapView 一次。然后,在更新时,只需更新它们(并使地图视图无效)。但不要一次又一次地添加它们。

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