删除地图中的叠加层

时间:2011-08-28 00:37:47

标签: android overlay

我的应用程序搜索和可视化相同的叠加层。但是,在下一次搜索中,旧的叠加层不清楚。我必须尝试使用​​map.getOverlays().clear();,但它也会移除MyLocationOverlay的叠加层。有一种只删除相同叠加层的方法吗?

3 个答案:

答案 0 :(得分:2)

我知道它有点太晚了,但是因为我提出了一个帮助我的解决方案,我想分享它以便将来帮助程序员..

@ hooked82:只做

的问题
overlays.remove(position)

是它的清单。因此,当您从列表中删除一个项目时,列表中此项目右侧的每个项目都会向左移动一个位置,这最终会使您的位置陷入困境,因此无法全面跟踪它们时间。

在我的一个项目中,我遇到了同样的问题。由于我在某些更新时添加和删除叠加层,经过一段时间后,很难跟踪列表中的叠加位置。

以下是我为解决问题所做的工作,到目前为止还没有问题。

第1步:创建自定义叠加层

public class MyOverlay extends Overlay
{
    private String overlayUUID;

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow)
    {
          -- do what you need to do here -- 
    }

    public String getOverlayUUID()
    {
          return overlayUUID
    }
}
在您处理叠加层的MapClass中的

第2步:。请确保mapOverlays列表是MapView类中的全局列表,您可以在其中添加所有mapOverlays

     List<Overlay> mapOverlays = mapView.getOverlays();

     public void removeChosenOverlay(String overlayUUID)
     {
         for(int i=0; i<mapOverlays.size(); i++)
         {
             String className = mapOverlays.get(i).getClass().getSimpleName();

             if(className.equals("MyOverlay"))
             {
                 MyOverlay myOverlay = (MyOverlay) mapOverlays.get(i);

                 if((myOverlay != null) && (myOverlay.getOverlayUUID.equals(overlayUUID)))
                 {
                     mapOverlays.remove(i);
                     mapView.invalidate()
                     break;
                 }
             }
         }
     }

使用上述方法,可以使用UUID唯一标识每个叠加层(在我的情况下,它是一个字符串,但您可以自定义创建您希望的任何格式的UUID)并从列表中成功删除相应的叠加项覆盖,不必担心他们在列表中的相对位置。

我希望通过唯一识别叠加层帮助其他人面对同样的问题。

答案 1 :(得分:1)

向地图添加叠加层时,可以将其添加到某个位置

overlays.add(position, overlay_object);

然后,当您需要删除特定叠加层时,可以以相同的方式删除它们

overlays.remove(position);

答案 2 :(得分:1)

你可以借助计数器和另一个对overlayItem的引用来保存你要删除的旧叠加层 在我的情况下,counter是current_overlay_counter,old_overlay_item获取旧覆盖的参考 在第一次调用时,计数器为0,因此没有要移除的叠加

public void getcurrentPostion()
    {
    GeoPoint gpoint=new GeoPoint((int)((current_location.getLatitude())*1E6),( (int)((current_location.getLongitude())*1E6)));
        OverlayItem overlayitem = new OverlayItem(gpoint, "Hola, Mundo!", "I'm in Mexico City!");       
        mapOverlays = map.getOverlays();  
        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
        if(current_overlay_counter>0)
        {
            System.out.println("deleting overlay");
            itemizedoverlay.removeOverlay(old_overlay_item);
            map.invalidate();
        }

        old_overlay_item=overlayitem;
        current_overlay_counter++;
        map_controller.setCenter(gpoint);
    }

您还需要一件事,一种在ItemizedOverlay类实现中删除叠加层的方法

此方法采用您要删除的叠加层的引用

public void removeOverlay(OverlayItem overlay){
          mOverlays.remove(overlay);
          System.out.println("removeOverlay is called");
             populate();
         }