【问题标题】:Add marker to map on tap点击添加标记到地图
【发布时间】:2013-09-04 12:36:25
【问题描述】:

我正在使用 osmdroid 编写一个应用程序来显示地图,我想在用户点击地图时为其添加一个标记,实际上我已经能够使用运动事件执行此操作,但这即使在用户使用时也会添加一个标记正在放大或缩小地图我不想要这个。 这是我必须添加标记的代码:

@Override    
    public boolean dispatchTouchEvent(MotionEvent ev) {
        int actionType = ev.getAction();
        switch (actionType) {
        case MotionEvent.ACTION_DOWN:
                Projection proj = myOpenMapView.getProjection();
                GeoPoint loc = (GeoPoint) proj.fromPixels((int)ev.getX(), (int)ev.getY()); 
                String longitude = Double.toString(((double)loc.getLongitudeE6())/1000000);
                String latitude = Double.toString(((double)loc.getLatitudeE6())/1000000);
                List<OverlayItem> anotherOverlayItemArray = new ArrayList<OverlayItem>();
                ExtendedOverlayItem mapItem = new ExtendedOverlayItem("", "", new GeoPoint((((double)loc.getLatitudeE6())/1000000), (((double)loc.getLongitudeE6())/1000000)), this);
                mapItem.setMarker(this.getResources().getDrawable(R.drawable.marker));
                anotherOverlayItemArray.add(mapItem);
                ItemizedIconOverlay<OverlayItem> anotherItemizedIconOverlay 
                 = new ItemizedIconOverlay<OverlayItem>(
                   this, anotherOverlayItemArray, null);
                myOpenMapView.getOverlays().add(anotherItemizedIconOverlay);
                Toast toast = Toast.makeText(getApplicationContext(), "Longitude: "+ longitude +" Latitude: "+ latitude , Toast.LENGTH_LONG);
                toast.show();

        }
        return super.dispatchTouchEvent(ev);
    }

这就是我最终解决它的方法:

Overlay touchOverlay = new Overlay(this){
                    ItemizedIconOverlay<OverlayItem> anotherItemizedIconOverlay = null; 
                    @Override
                    protected void draw(Canvas arg0, MapView arg1, boolean arg2) {

                    }
                    @Override
                    public boolean onSingleTapConfirmed(final MotionEvent e, final MapView mapView) {
                        Projection proj = mapView.getProjection();
                        GeoPoint loc = (GeoPoint) proj.fromPixels((int)e.getX(), (int)e.getY()); 
                        longitude = Double.toString(((double)loc.getLongitudeE6())/1000000);
                        latitude = Double.toString(((double)loc.getLatitudeE6())/1000000);
                        ArrayList<OverlayItem> overlayArray = new ArrayList<OverlayItem>();
                        OverlayItem mapItem = new OverlayItem("", "", new GeoPoint((((double)loc.getLatitudeE6())/1000000), (((double)loc.getLongitudeE6())/1000000)));
                        mapItem.setMarker(marker);
                        overlayArray.add(mapItem);
                        if(anotherItemizedIconOverlay==null){
                            anotherItemizedIconOverlay = new ItemizedIconOverlay<OverlayItem>(getApplicationContext(), overlayArray,null);
                            myOpenMapView.getOverlays().add(anotherItemizedIconOverlay);
                            myOpenMapView.invalidate();
                        }else{
                            myOpenMapView.getOverlays().remove(anotherItemizedIconOverlay);
                            myOpenMapView.invalidate();
                            anotherItemizedIconOverlay = new ItemizedIconOverlay<OverlayItem>(getApplicationContext(), overlayArray,null);
                            myOpenMapView.getOverlays().add(anotherItemizedIconOverlay);
                        }
                        dlgThread();
                        return true;
                    }
                };
                myOpenMapView.getOverlays().add(touchOverlay);

【问题讨论】:

    标签: android osmdroid


    【解决方案1】:

    您应该创建一个 Overlay 并覆盖 onSingleTapConfirmed() 方法以获取单击:

    @Override
    public boolean onSingleTapConfirmed(final MotionEvent event, final MapView mapView) {
        // Handle single-tap here, then return true.
        return true;
    }
    

    【讨论】:

    • 你能告诉我怎么做吗,我对这个真的很陌生,它让我发疯。我所有的谷歌搜索都是徒劳的。
    • @kurtzmarc 我看到很多关于如何在地图上选择位置的回复,但是是否没有内置插件可以检测对 DirectedLocationOverlay 标记的点击?
    • 你能描述一下如何使用这个方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多