0

我的地图代码是这样的:

public class ExampleActivity extends MapActivity {
    private MapView map = null;
    private MyLocationOverlay me = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        map = (MapView) findViewById(R.id.map);

        map.getController().setCenter(getPoint(18.5236296, 73.8478429));
        map.getController().setZoom(17);
        map.setBuiltInZoomControls(true);

        Drawable marker = getResources().getDrawable(R.drawable.marker);

        marker.setBounds(0, 0, marker.getIntrinsicWidth(),
                marker.getIntrinsicHeight());

        map.getOverlays().add(new SitesOverlay(marker));

        me = new MyLocationOverlay(this, map);
        map.getOverlays().add(me);
    }

    @Override
    public void onResume() {
        super.onResume();

        me.enableCompass();
    }

    @Override
    public void onPause() {
        super.onPause();

        me.disableCompass();
    }

    @Override
    protected boolean isRouteDisplayed() {

        return (false);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_S) {

            map.setSatellite(!map.isSatellite());
            return (true);
        } else if (keyCode == KeyEvent.KEYCODE_Z) {

            map.displayZoomControls(true);
            return (true);
        }

        return (super.onKeyDown(keyCode, event));
    }

    private GeoPoint getPoint(double lat, double lon) {

        return (new GeoPoint((int) (lat * 1000000.0), (int) (lon * 1000000.0)));
    }

    private class SitesOverlay extends ItemizedOverlay<OverlayItem> {

        private List<OverlayItem> items = new ArrayList<OverlayItem>();
        private Drawable marker = null;
        private OverlayItem inDrag = null;
        private ImageView dragImage = null;
        private int xDragImageOffset = 0;
        private int yDragImageOffset = 0;
        private int xDragTouchOffset = 0;
        private int yDragTouchOffset = 0;

        public SitesOverlay(Drawable marker) {
            super(marker);
            this.marker = marker;

            dragImage = (ImageView) findViewById(R.id.drag);
            xDragImageOffset = dragImage.getDrawable().getIntrinsicWidth() / 2;
            yDragImageOffset = dragImage.getDrawable().getIntrinsicHeight();

            items.add(new OverlayItem(getPoint(18.5236296, 73.8478429), "Pune",
                    "Wakad"));

            populate();
        }

        @Override
        protected OverlayItem createItem(int i) {

            return (items.get(i));
        }

        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            super.draw(canvas, mapView, shadow);

            boundCenterBottom(marker);
        }

        @Override
        public int size() {

            return (items.size());
        }

        @Override
        public boolean onTouchEvent(MotionEvent event, MapView mapView) {

            final int action = event.getAction();
            final int x = (int) event.getX();
            final int y = (int) event.getY();
            boolean result = false;

            if (action == MotionEvent.ACTION_DOWN) {

                for (OverlayItem item : items) {
                    Point p = new Point(0, 0);

                    map.getProjection().toPixels(item.getPoint(), p);

                    if (hitTest(item, marker, x - p.x, y - p.y)) {

                        result = true;
                        inDrag = item;
                        items.remove(inDrag);
                        populate();

                        xDragTouchOffset = 0;
                        yDragTouchOffset = 0;

                        setDragImagePosition(p.x, p.y);
                        dragImage.setVisibility(View.VISIBLE);

                        xDragTouchOffset = x - p.x;
                        yDragTouchOffset = y - p.y;

                        break;
                    }
                }
            } else if (action == MotionEvent.ACTION_MOVE && inDrag != null) {

                setDragImagePosition(x, y);
                result = true;
            } else if (action == MotionEvent.ACTION_UP && inDrag != null) {

                dragImage.setVisibility(View.GONE);

                GeoPoint pt = map.getProjection().fromPixels(
                        x - xDragTouchOffset, y - yDragTouchOffset);
                OverlayItem toDrop = new OverlayItem(pt, inDrag.getTitle(),
                        inDrag.getSnippet());

                items.add(toDrop);
                populate();

                inDrag = null;
                result = true;
            }

            return (result || super.onTouchEvent(event, mapView));
        }

        private void setDragImagePosition(int x, int y) {

            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) dragImage
                    .getLayoutParams();

            lp.setMargins(x - xDragImageOffset - xDragTouchOffset, y
                    - yDragImageOffset - yDragTouchOffset, 0, 0);
            dragImage.setLayoutParams(lp);
        }
    }
}

这在地图上显示了一个标记,我可以将此标记拖放到地图上的其他位置....所以现在,我的问题是如何获取标记当前位置的纬度和经度?

4

1 回答 1

2

onTouchListener拖放代码中,您可以使用下面的代码来获取GeoPoint

if (action == MotionEvent.ACTION_UP && inDrag != null) {
    GeoPoint pt = map.getProjection().fromPixels(
                        x - xDragTouchOffset, y - yDragTouchOffset);

    taplat = pt.getLatitudeE6() / 1E6; // latitude
    taplon = pt.getLongitudeE6() / 1E6; // longitude
}
于 2012-06-28T10:08:15.847 回答