首页 > 解决方案 > 如何从 Osmdroid 地图中删除标记

问题描述

我正在创建一个需要在地图上设置标记的 Android 应用程序。由于我的应用程序需要离线功能,我需要使用 Osmdroid 来解决这个问题。现在我的问题是地图上的标记,我可以使用标记或 ItemizedOverlay 轻松添加它们,但我遇到的问题是我无法从地图中删除标记。

我用来添加标记的代码是这个:

    Marker marker = new Marker(mapView);
    marker.setPosition(new GeoPoint(41.3746312,19.7710733));
    marker.setIcon(getResources().getDrawable(R.drawable.marker));
    marker.setImage(getResources().getDrawable(R.drawable.marker));
    marker.setTitle("Marker");
    marker.setInfoWindow(null);
    marker.showInfoWindow();
    mapView.getOverlays().add(marker);
    mapView.invalidate();

但我在删除它们时遇到了问题,因为删除它的唯一方法是:

    mapView.getOverlays().clear();

而且我需要同时删除一个特定的标记而不是全部。

标签: javaandroiddictionaryosmdroid

解决方案


  1. 添加标记时,将 ID 设置为您喜欢的任何内容。

     MapView mapview = (MapView) findViewById(R.id.mapview);
     Marker marker = new Marker(mapview);
     marker.setId("String");
     mapview.getOverlays().add(marker);
    
  2. 由于 Marker 将作为 Overlay 对象添加到 mapviews 叠加列表中,因此您可以循环遍历它,直到根据 Id 找到您的特定标记。

     for(int i=0;i<mapview.getOverlays().size();i++){
        Overlay overlay=mapview.getOverlays().get(i);
        if(overlay instanceof Marker&&((Marker) overlay).getId().equals("String")){
           mapview.getOverlays().remove(overlay);
      }
    }
    

推荐阅读