每次获得新的 LatLng 时如何更新标记?
Posted
技术标签:
【中文标题】每次获得新的 LatLng 时如何更新标记?【英文标题】:How to update marker on every time when I got new LatLng? 【发布时间】:2020-06-30 14:35:14 【问题描述】:我每 5 秒更新一次 LATLNG,我想在更新的 Latlng 上更新标记,这是我的代码:
private class LocationReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
lat = Double.valueOf(intent.getStringExtra("lat"));
longD = Double.valueOf(intent.getStringExtra("long"));
userLat = Double.valueOf(intent.getStringExtra("userLat"));
userLong = Double.valueOf(intent.getStringExtra("userLong"));
latDest = Double.valueOf(intent.getStringExtra("latDest"));
longDest = Double.valueOf(intent.getStringExtra("longDest"));
userDropLocation = intent.getStringExtra("userDropLocation");
userManualLocation = intent.getStringExtra("userLocation");
driverLatLng = new LatLng(lat, longD);
userLatlong = new LatLng(userLat, userLong);
dropLatlong = new LatLng(latDest, longDest);
Log.d("@@Latdriver", String.valueOf(lat));
Log.d("@@longDriver", String.valueOf(longD));
Log.d("@@latLngCurrent", String.valueOf(latLngCurrent));
Log.d("@@driverLatLng", String.valueOf(driverLatLng));
Log.d("@@userLat", String.valueOf(userLat));
Log.d("@@userLong", String.valueOf(userLong));
Log.d("@@userManualLocation", userManualLocation);
Log.d("@@userDropLocation", userDropLocation);
String urlToDrop = getDirectionsUrl(driverLatLng, dropLatlong);
DownloadTask downloadTask1 = new DownloadTask();
downloadTask1.execute(urlToDrop);
map.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pin_green))
.position(new LatLng(latDest,longDest )));
MarkerOptions a = new MarkerOptions()
.position(driverLatLng);
Marker m = map.addMarker(a);
m.setPosition(driverLatLng);
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(driverLatLng);
LatLngBounds bounds = builder.build();
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 150);
map.animateCamera(cu);
在上面的代码中,每次更新时都会添加新标记,如何解决这个问题请帮助我,提前谢谢你在这里的每一个答案
【问题讨论】:
当我每次创建新标记时都会检查,当您获得新的 latlng 时,您可以创建全局标记并将其位置设置为您获得新 latlng 的位置。 【参考方案1】:每 5 秒一次太频繁了。它会像任何东西一样耗尽用户的电池。 30-60 秒应该没问题。
问题来了
MarkerOptions a = new MarkerOptions()
.position(driverLatLng);
Marker m = map.addMarker(a);
m.setPosition(driverLatLng);
您每次都在创建新的标记。
使用字段变量作为标记。第一次初始化它。从下一次开始,只需将标记的位置设置为新的 lat lng。
你的代码应该是这样的
private Marker driverMarker ;
// inside broad cast receiver
if(null==driverMarke)
MarkerOptions a = new MarkerOptions()
.position(driverLatLng);
driverMarker = map.addMarker(a);
driverMarker.setPosition(driverLatLng);
【讨论】:
让我试试这个 Marker.setPosition(com.google.android.gms.maps.model.LatLng)' 在空对象引用上 把 if(null!=driverMarke) 改成 if(null==driverMarke)以上是关于每次获得新的 LatLng 时如何更新标记?的主要内容,如果未能解决你的问题,请参考以下文章
使用 ClusterManager 时如何更新 Map 上的标记