每次获得新的 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 时如何更新标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得地理编码器在 LatLng 国家语言上的结果?

如何批量获得随机字母输出

如何获得新的 android cast 图标

使用 ClusterManager 时如何更新 Map 上的标记

如何使用来自 Firebase Google Maps API Android 的数据更新标记位置

每次询问时如何确保获得gps位置