地图显示多个标记(覆盖)
Map shows multiple markers (overlays)
我在我的项目中使用 osmdroid API 制作地图。
下面是我编写的用于在 selected 位置放置叠加层(标记)的代码。
如果我点击地图到 select 任何位置,它会在那里放置一个叠加层,但如果我再次点击地图到 select 任何新位置,它会在那里显示一个新的叠加层(它应该)但它不会从以前的位置删除叠加层。
因此,如果我 select 10 个位置,它会显示 10 个叠加层!
我的问题是,如何在 selected 新位置时删除之前放置的叠加层?
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
int actionType = ev.getAction();
switch (actionType) {
case MotionEvent.ACTION_UP:
Projection proj = mMapView.getProjection();
IGeoPoint loc = proj.fromPixels((int)ev.getX(), (int)ev.getY());
String longitude = Double.toString(((double)loc.getLongitudeE6())/1000000);
String latitude = Double.toString(((double)loc.getLatitudeE6())/1000000);
GeoPoint mypointicon = new GeoPoint(loc.getLatitude(), loc.getLongitude());
final ArrayList<OverlayItem> items=new ArrayList<>();
items.add(new OverlayItem("Here", "Sample Description", mypointicon));
this.mMyLocationOverlay = new ItemizedIconOverlay<>(items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
return true;
}
@Override
public boolean onItemLongPress(final int index, final OverlayItem item) {
return false;
}
}, mResourceProxy);
this.mMapView.getOverlays().add(this.mMyLocationOverlay);
mMapView.invalidate();
Toast.makeText(getApplicationContext(),
"Longitude: "+ longitude +" Latitude: "+ latitude , Toast.LENGTH_LONG).show();
}
return super.dispatchTouchEvent(ev);
}
基本上,您必须管理您的地图叠加层。
您可以添加叠加层:this.mMapView.getOverlays().add(this.mMyLocationOverlay);
所以你也可以删除它:this.mMapView.getOverlays().remove(index);
您可以删除所有这些:this.mMapView.getOverlays().clear();
我在我的项目中使用 osmdroid API 制作地图。
下面是我编写的用于在 selected 位置放置叠加层(标记)的代码。
如果我点击地图到 select 任何位置,它会在那里放置一个叠加层,但如果我再次点击地图到 select 任何新位置,它会在那里显示一个新的叠加层(它应该)但它不会从以前的位置删除叠加层。
因此,如果我 select 10 个位置,它会显示 10 个叠加层!
我的问题是,如何在 selected 新位置时删除之前放置的叠加层?
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
int actionType = ev.getAction();
switch (actionType) {
case MotionEvent.ACTION_UP:
Projection proj = mMapView.getProjection();
IGeoPoint loc = proj.fromPixels((int)ev.getX(), (int)ev.getY());
String longitude = Double.toString(((double)loc.getLongitudeE6())/1000000);
String latitude = Double.toString(((double)loc.getLatitudeE6())/1000000);
GeoPoint mypointicon = new GeoPoint(loc.getLatitude(), loc.getLongitude());
final ArrayList<OverlayItem> items=new ArrayList<>();
items.add(new OverlayItem("Here", "Sample Description", mypointicon));
this.mMyLocationOverlay = new ItemizedIconOverlay<>(items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
return true;
}
@Override
public boolean onItemLongPress(final int index, final OverlayItem item) {
return false;
}
}, mResourceProxy);
this.mMapView.getOverlays().add(this.mMyLocationOverlay);
mMapView.invalidate();
Toast.makeText(getApplicationContext(),
"Longitude: "+ longitude +" Latitude: "+ latitude , Toast.LENGTH_LONG).show();
}
return super.dispatchTouchEvent(ev);
}
基本上,您必须管理您的地图叠加层。
您可以添加叠加层:this.mMapView.getOverlays().add(this.mMyLocationOverlay);
所以你也可以删除它:this.mMapView.getOverlays().remove(index);
您可以删除所有这些:this.mMapView.getOverlays().clear();