Android tap on map and get coordinates

2019-02-18 09:13发布

Hi guys I am trying to make an app that once the user taps on a map it gets the coordinates of that specific point.

Among others i have also read that: Get coordinates on tapping map in android

It seems like the most relevant post but what I want to do is to be able to tap anywhere on the map not on an marker/overlay item. In fact I want to create a marker in that specific point that the user tapped and get the coordinates of it.

Is that possible?

Thanks

Mike

3条回答
小情绪 Triste *
2楼-- · 2019-02-18 09:44

Yes. In fact, the answer I gave in that other question is what you need.

查看更多
放荡不羁爱自由
3楼-- · 2019-02-18 09:45

Should be trivial with a little bit of math. You can use getLatitudeSpan() and getLongitudeSpan() to get the extents of the visible map, and getMapCenter() to see the center point. Just map that to the coordinates of the touch event.

EDIT: Mark, as always, has an even more elegant solution.

查看更多
ゆ 、 Hurt°
4楼-- · 2019-02-18 09:47

You will need to override onTouchEvent().

i hope following code will help u... showing using onTouchEvent() to while user lifts his finger from map...

Given the screen coordinates of the touch, you can use a Projection (from getProjection() on MapView) to convert that to latitude and longitude...

@Override
        public boolean onTouchEvent(MotionEvent event, MapView mapView) 
        {   
            GeoPoint point_touch;
            MapController map_controller=mapView.getController();
            //---when user lifts his finger---
            if (event.getAction() == event.ACTION_UP) {                
                point_touch = mapView.getProjection().fromPixels((int) event.getX(),(int) event.getY());                    
                Log.i("Cordinates","Lattitude="+point_touch.getLatitudeE6() / 1E6 
                        +" Longitude="+point_touch.getLongitudeE6() /1E6  );
                map_controller.animateTo(point_touch);
                return true;
            }    
            else
            {
                return false;
            }

         }
查看更多
登录 后发表回答