gpt4 book ai didi

android - Osmdroid 标记未更新

转载 作者:行者123 更新时间:2023-11-30 00:56:10 27 4
gpt4 key购买 nike

我必须使用 osmdriod map 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 .

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

最佳答案

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

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

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

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

关于android - Osmdroid 标记未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40131987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com