如何从Google地图中删除特定的多个标记,而不是单个或全部标记

时间:2019-07-18 11:38:49

标签: android google-maps marker

我想从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标记对象的创建中删除标记。
我还具有从其他对象创建的其他标记。当我使用pupMarker.remove();时,它仅从上述代码中删除最后创建的标记 并且mMap.clear();从地图上删除所有标记。

2 个答案:

答案 0 :(得分:2)

使用googleMap.addMarker(...)创建标记时,您会收到一个Marker对象,该对象代表该标记。 也就是说,地图上每个标记的每个标记对象。

例如,您可以在特定的列表组中添加所需的标记。

步骤:

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

答案 1 :(得分:0)

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

编辑1:

使用HashMap代替List来保存对Markers的引用可能更好。以后使用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);
}