每次获得新的LatLng时如何更新标记?

问题描述 投票:0回答:1

我每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);


    }
}

在上面的代码中,每次更新时都会添加新的标记,以解决此问题,请帮助我,在此先感谢您,每个答案都感谢您

android google-maps location real-time
1个回答
0
投票

每5秒太频繁了。它将耗尽用户的电池电量。 30-60秒应该没问题。

问题在这里

MarkerOptions a = new MarkerOptions()
                .position(driverLatLng);
        Marker m = map.addMarker(a);
        m.setPosition(driverLatLng);

您每次都创建新的标记。

将字段变量用于标记。首次初始化。从下一次开始,只需将标记的位置设置为新纬度即可。

您的代码应该是这样的

private Marker driverMarker ;

// inside broad cast receiver     

if(null!=driverMarke){
    MarkerOptions a = new MarkerOptions()
                .position(driverLatLng);
        driverMarker = map.addMarker(a);

}

driverMarker.setPosition(driverLatLng);
© www.soinside.com 2019 - 2024. All rights reserved.