如何从谷歌地图中删除特定的多个标记而不是单个或所有标记

Posted

技术标签:

【中文标题】如何从谷歌地图中删除特定的多个标记而不是单个或所有标记【英文标题】:How to remove specific multiple marker from google map instead of single or all marker 【发布时间】:2019-11-27 08:02:27 【问题描述】:

我想从 Google 地图中删除多个特定标记,但我做不到。我已经知道marker.remove();mMap.clear();,但它们对我没有帮助。看看下面的代码我是如何创建多个标记的。

    private ArrayList<String> pup_latList01;
    private ArrayList<String> pup_longList01;
    private ArrayList<String> pup_nameList01;

    for(int i = 0 ;i< pup_nameList01.size();i++)
    
       LatLng puplatlang = new LatLng(Double.parseDouble(pup_latList01.get(i)),Double.parseDouble(pup_longList01.get(i)));
       pupMarker = mMap.addMarker(new MarkerOptions().position(puplatlang).title(pup_nameList01.get(i)).draggable(true).icon(bitmapDescriptorFromVector(MapsActivity.this, R.drawable.bus_stop_small)));
    

我只想从 pupMarker Marker 对象的创建中删除标记。 我还有从其他对象创建的其他标记。当我使用pupMarker.remove(); 时,它只从上面的代码中删除最后创建的标记 mMap.clear(); 从地图中删除所有标记。

【问题讨论】:

除了管理Marker结果外,您可能还需要setTaggetTag来识别特定的感兴趣的结果(例如使用i设置它)。 【参考方案1】:

在此代码中,pupMarker 始终是列表中的最后一个标记。因此,当您使用 pupMarker.remove(); 时,它只会删除最后创建的标记。您可以创建一个包含所有这些标记的列表,然后获取要删除的标记。

编辑 1:

使用 HashMap 而不是 List 来保存对标记的引用可能会更好。以后用 Map 中的键更容易找到它。

编辑 2:

评论中要求的示例:

private HashMap<Integer, Marker> hashMapMarker = new HashMap<>();

for(int i = 0 ;i< pup_nameList01.size();i++)
       
       LatLng puplatlang = new LatLng(Double.parseDouble(pup_latList01.get(i)),Double.parseDouble(pup_longList01.get(i)));
       Marker pupMarker = mMap.addMarker(new MarkerOptions().position(puplatlang).title(pup_nameList01.get(i)).draggable(true).icon(bitmapDescriptorFromVector(MapsActivity.this, R.drawable.bus_stop_small)));
hashMapMarker.put(i, pupMarker);
       

请注意,如果使用 Integer 作为键,使用 SparseArray 而不是 HashMap 可能更好。

private void removeMarker(int position)
     hashMapMarker.get(positon).remove();
     hashMapMarker.remove(position);

【讨论】:

你能给我举个例子吗? 我已经更新了答案。如果您不熟悉地图,可以使用 List。 感谢您的解决方案,对它的工作进行了一些修改,对不起,回复晚了。【参考方案2】:

当您使用 googleMap.addMarker(...) 创建标记时,您会收到一个表示它的 Marker 对象。 即地图上每个标记的每个标记对象。

因此,例如,您可以在特定列表组中添加您喜欢的标记。

步骤:

    例如,创建一个 List 类型的列表。 对于您在 googleMap.addMarker(...) 上收到的每个标记,请将其添加到列表中。 要清除所有这些特定标记,请使用 for each 循环列表并使用 Marker.remove();方法。 使用 List.clear() 清除列表;

【讨论】:

你能举个例子吗?

以上是关于如何从谷歌地图中删除特定的多个标记而不是单个或所有标记的主要内容,如果未能解决你的问题,请参考以下文章

在本机反应中从谷歌地图中删除标记

从谷歌地图中删除标记集群[不仅仅是标记]

从谷歌地图iOS中删除标记

Flutter - 从谷歌地图小部件中删除标记

当你从谷歌地图API中点击地图中的内置位置(不是标记)时,如何自定义弹窗的内容?

如何:从谷歌地图上的 JSON 动态更新标记