【问题标题】:Map shows multiple markers (overlays)地图显示多个标记(叠加)
【发布时间】:2015-03-10 19:50:07
【问题描述】:

我在我的项目中使用 osmdroid API 来制作地图。

以下是我编写的用于在选定位置放置覆盖(标记)的代码。

如果我点击地图选择任何位置,它会在那里放置一个叠加层,但如果我再次点击地图选择任何新位置,它会在那里显示一个新的叠加层(它应该)但是 它没有t 移除之前位置的叠加层

所以如果我选择 10 个位置,它会显示 10 个叠加层!

我的问题是,如何在选择新位置时删除之前放置的叠加层?

@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);
}

【问题讨论】:

  • 您还在使用 Map API V1?
  • 是的@Xcihnegn 如何删除以前的叠加层?我试过 overlay.setVisibility();但没有帮助
  • itemizedOverlay.clear();可以在下次抽奖前清空吗?
  • @Xcihnegn 不起作用! clear() 方法与 itemizedOverlay 不兼容
  • 你可以在绘制下一个之前找到适合clear的api

标签: android maps openstreetmap marker osmdroid


【解决方案1】:

基本上,您必须管理地图叠加层。

你可以添加一个覆盖:this.mMapView.getOverlays().add(this.mMyLocationOverlay);

所以你也可以删除它:this.mMapView.getOverlays().remove(index);

您可以将它们全部删除:this.mMapView.getOverlays().clear();

【讨论】:

  • 我搜索并找到了getOverlays.clear();,但不知道如何使用它。你的回答对我帮助很大。谢谢!
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多