如何从Osmdroid地图中删除标记

时间:2019-02-07 13:11:08

标签: java android dictionary osmdroid

我正在创建一个Android应用程序,需要在地图上设置标记。而且由于我的应用程序需要离线功能,因此我需要使用Osmdroid解决此问题。现在我的问题是地图上的标记,我可以使用Markers或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();

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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("Title", "Description", new 
GeoPoint(31.7359474,55.4384632))); 

map.getOverlays().add(mOverlay);

在运行应用程序时,您可以添加更多项目,并使用以下代码:

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

使用以下代码在应用程序运行时删除项目:

mOverlay.removeItem(int position);

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

答案 2 :(得分:0)

  1. 添加标记时,请将ID设置为任意值。

     MapView mapview = (MapView) findViewById(R.id.mapview);
     Marker marker = new Marker(mapview);
     marker.setId("String");
     mapview.getOverlays().add(marker);
    
  2. 由于标记将作为“覆盖”对象添加到地图视图覆盖列表中,因此您可以循环遍历它,直到您基于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);
      }
    }
    

答案 3 :(得分:0)

Kotlin 版本:

links_df$from
#> [1]  3  3  5  6  8 10
nodes_df$id
#> [1]  1  3  5  6  8 10
match(links_df$from, nodes_df$id) - 1
#> [1] 1 1 2 3 4 5

links_df$to
#> [1]  1  5  6  8 10  3
nodes_df$id
#> [1]  1  3  5  6  8 10
match(links_df$to, nodes_df$id) - 1
#> [1] 0 2 3 4 5 1

删除(改编自 Dren Pirraku 的回答):

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()