如何在 Android Studio 中删除谷歌地图上多个更新位置的旧标记?
Posted
技术标签:
【中文标题】如何在 Android Studio 中删除谷歌地图上多个更新位置的旧标记?【英文标题】:How to remove the old marker of multiple updated location on Google Map in Android Studio? 【发布时间】:2022-01-03 23:21:21 【问题描述】:private final HashMap<String, Marker> hm=new HashMap<String, Marker>();
@Override
public void onMapReady(GoogleMap googleMap)
mMap = googleMap;
mMap.getUiSettings().setZoomControlsEnabled(true);
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference userLocationRef = db.child("UserLocation");
db.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
userLocationRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>()
@Override
public void onComplete(@NonNull Task<DataSnapshot> task)
if (task.isSuccessful())
for (DataSnapshot ds : task.getResult().getChildren())
String userID = String.valueOf(ds.child("userID").getValue());
double lat = ds.child("You").child("l").child("0").getValue(Double.class);
double lng = ds.child("You").child("l").child("1").getValue(Double.class);
Log.d("TAG", lat + ", " + lng); //Check the values
Log.d("TAG", userID+"hi"); //Check the values
//Add location on Google Map
LatLng location = new LatLng(lat, lng);
if (hm.containsKey(userID))
hm.get(userID).remove();
currentLocationMarker = mMap.addMarker(new MarkerOptions().position(location).title(userID));
currentLocationMarker.showInfoWindow();
hm.put(userID, currentLocationMarker);
else
Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
);
@Override
public void onCancelled(@NonNull DatabaseError error)
);
上述代码用于从实时 Firebase 中检索多个用户的实时位置。 实时firebase的结构如下图所示:
当多个用户的位置发生变化时,标记开始更新用户的位置,但问题是当标记开始更新用户的新位置时,用户的旧标记并没有被删除。
问题如下图所示:
那么,问题是如何去除多个标记的旧标记,而地图只能为每个用户显示一个标记?如果您能提供帮助,谢谢!
【问题讨论】:
尝试将addMarker
返回的markers
保存在map
对象中(我建议hashmap
)并使用marker.remove
删除重复的标记。来源:Remove old markers on Google Map-安东尼
如果您使用hashmap
,您可以使用.contains
或其他实现的条件来跟踪哪个用户已经有标记并删除以前的标记。
声明private HashMap<string, Marker> hm=new HashMap()<>
,用String g=ds.child("you").child("g")
获取g作为字符串(添加getValue
),检查if(hm.contains(g))
(替换你原来的if)然后hm.get(g).remove()
在if中删除标记如果是。最后,像往常一样创建标记并使用hm.put(g, marker)
将其放入哈希图中。
当您使用hm.get(userid).remove()
而不是hm.remove(userID)
时会发生什么?。
有效!!!非常感谢!
【参考方案1】:
您正在尝试在数据库中存储和检索用户的每个位置信息(纬度、经度)。 但我认为对于地图上的显示,您可能只想显示用户的最新或当前位置。这样,地图中每个用户最多只能有一个标记。当用户的位置发生变化时,您可以更新相同的标记或删除现有标记并添加新标记。为此,您可以检查@alias 在上述 cmets 中对您的问题的建议。 要识别每个用户的最新位置,您可以将日期和时间与每条记录一起存储。以便您可以相应地查询数据库。
【讨论】:
通过@alias建议的方法,现在可以删除旧的标记。你能解释一下如何在每条记录中存储日期和时间吗?这样我就可以相应地查询数据库并在地图上显示多个标记(用户位置)。以上是关于如何在 Android Studio 中删除谷歌地图上多个更新位置的旧标记?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android Studio 中删除谷歌地图上多个更新位置的旧标记?
有时我在 Android Studio 中遇到谷歌地图问题,但并非总是如此。为啥?如何删除谷歌地图上方的白条?
如何在 Android Studio 中添加捕捉到道路谷歌地图