Java 如何从Osmdroid映射中删除标记
我正在创建一个Android应用程序,需要在地图上设置标记。由于我的应用程序需要离线功能,我需要使用Osmdroid来解决这个问题。现在我的问题是地图上的标记,我可以通过使用标记或ItemizedOverlay轻松添加它们,但我的问题是我无法从地图上删除标记 我用于添加标记的代码如下: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));
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的答案):