我正在创建一个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();
我需要删除一个特定的标记,而不是同时删除所有标记。
答案 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)
添加标记时,请将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);
}
}
答案 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()