Java 如何从Osmdroid映射中删除标记

Java 如何从Osmdroid映射中删除标记,java,android,dictionary,osmdroid,Java,Android,Dictionary,Osmdroid,我正在创建一个Android应用程序,需要在地图上设置标记。由于我的应用程序需要离线功能,我需要使用Osmdroid来解决这个问题。现在我的问题是地图上的标记,我可以通过使用标记或ItemizedOverlay轻松添加它们,但我的问题是我无法从地图上删除标记 我用于添加标记的代码如下: Marker marker = new Marker(mapView); marker.setPosition(new GeoPoint(41.3746312,19.7710733));

我正在创建一个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();

我需要删除一个特定标记,而不是同时删除所有标记。

要删除特定标记,您应该使用:

    mapView.getOverlays().remove(overlay);
    mapView.invalidate();

要删除特定标记,应使用:

    mapView.getOverlays().remove(overlay);
    mapView.invalidate();

还有另一种添加和删除项目的方法

首先,您需要以下代码段:

ArrayList<OverlayItem> items = items = new ArrayList<OverlayItem>();
ItemizedOverlayWithFocus<OverlayItem> mOverlay = mOverlay = new ItemizedOverlayWithFocus<OverlayItem>(items,
            new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
                @Override
                public boolean onItemSingleTapUp(final int position, final OverlayItem item) {
                    //do something
                    return true;
                }
                @Override
                public boolean onItemLongPress(final int position, final OverlayItem item) {
                    return false;
                }
            }, getApplicationContext());
 mOverlay.setFocusItemsOnTap(true);
运行应用程序时,您可以使用以下代码添加更多项目:

mOverlay.addItem(new OverlayItem("new Title", "new Description", new GeoPoint(Latitude,Longitude)));
mOverlay.removeItem(int position);
使用以下代码在应用程序运行时删除项目:

mOverlay.addItem(new OverlayItem("new Title", "new Description", new GeoPoint(Latitude,Longitude)));
mOverlay.removeItem(int position);

位置是您添加到列表中的第n个项目。您可以将删除代码放入我们在本答案中使用的
onItemSingleTapUp
,这意味着当您点击项目时,它将从屏幕上删除。

还有另一种添加和删除项目的方法

首先,您需要以下代码段:

ArrayList<OverlayItem> items = items = new ArrayList<OverlayItem>();
ItemizedOverlayWithFocus<OverlayItem> mOverlay = mOverlay = new ItemizedOverlayWithFocus<OverlayItem>(items,
            new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
                @Override
                public boolean onItemSingleTapUp(final int position, final OverlayItem item) {
                    //do something
                    return true;
                }
                @Override
                public boolean onItemLongPress(final int position, final OverlayItem item) {
                    return false;
                }
            }, getApplicationContext());
 mOverlay.setFocusItemsOnTap(true);
运行应用程序时,您可以使用以下代码添加更多项目:

mOverlay.addItem(new OverlayItem("new Title", "new Description", new GeoPoint(Latitude,Longitude)));
mOverlay.removeItem(int position);
使用以下代码在应用程序运行时删除项目:

mOverlay.addItem(new OverlayItem("new Title", "new Description", new GeoPoint(Latitude,Longitude)));
mOverlay.removeItem(int position);
position
是您添加到列表中的第n个项目。您可以将删除代码放入本答案中使用的
onItemSingleTapUp
,这意味着当您点击项目时,它将从屏幕中删除

  • 添加标记时,请将Id设置为您喜欢的任何内容

     MapView mapview = (MapView) findViewById(R.id.mapview);
     Marker marker = new Marker(mapview);
     marker.setId("String");
     mapview.getOverlays().add(marker);
    
  • 由于标记将作为覆盖对象添加到“地图视图覆盖”列表中,因此可以在其中循环,直到根据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);
      }
    }
    
    for(int i=0;i
    
  • 添加标记时,请将Id设置为您喜欢的任何内容

     MapView mapview = (MapView) findViewById(R.id.mapview);
     Marker marker = new Marker(mapview);
     marker.setId("String");
     mapview.getOverlays().add(marker);
    
  • 由于标记将作为覆盖对象添加到“地图视图覆盖”列表中,因此可以在其中循环,直到根据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);
      }
    }
    
    for(int i=0;iKotlin版本:

    val gPt = GeoPoint(location.latitude, location.longitude)
    val marker = Marker(map)
    marker.position = gPt
    marker.icon = getDrawable(R.drawable.ic_baseline_location_on_24)
    marker.id = "String"
    map.overlays.add(marker)
    map.invalidate()
    
    删除(改编自Dren Pirraku的答案):

    Kotlin版本:

    val gPt = GeoPoint(location.latitude, location.longitude)
    val marker = Marker(map)
    marker.position = gPt
    marker.icon = getDrawable(R.drawable.ic_baseline_location_on_24)
    marker.id = "String"
    map.overlays.add(marker)
    map.invalidate()
    
    删除(改编自Dren Pirraku的答案):