简体   繁体   中英

How to get the latitude and longitude of location where user taps on the map in android

In my Android application, I'm using google maps v2 to show map by getting the latitute and longitude of the device's current location And I'm showing pin on that location.

Now when user clicks or taps on any other location on the map, then I have to get that points latitude and longitude and i have to set the pin at that location.

Could you please tell me how get the latitude and longitude of the user taps/clicks location.

An example of what i use. Change it accordingly for your needs. I use it with long press.

map.setOnMapLongClickListener(new OnMapLongClickListener() {
            @Override
            public void onMapLongClick(LatLng point) {
                    map.addMarker(new MarkerOptions().position(point).title("Custom location").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));enter code here
            }
        });

the LatLng point contains the coordinated of the longpress

Try to use google-maps v2 built-in method.

map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
      @Override
      public void onMapClick(LatLng position) {
         Toast.makeText(context,position.latitude+" : "+position.longitude,Toast.LENGTH_SHORT).show();
      }
});

Try the following.

Write a class which derives from the Overlay class and override the onTap() method. Then you can add your overlay to the your MapView . A GeoPoint object, which represents the position of you tap, is passed to the onTap() method when you tab somewhere on the map.

OR

The modern answer here , using Android Maps v2, is to use OnMapClickListener, which gives you the LatLng of a tap on the map.

// Setting onclick event listener for the map
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

    @Override
    public void onMapClick(LatLng point) {

        // Creating MarkerOptions
        MarkerOptions options = new MarkerOptions();

        // Setting the position of the marker
       options.position(point);

        //Get LatLng from touched point

        double touchLat=point.latitude;
        double touchLong=point.longitude;

        ///here is reverse GeoCoding which helps in getting address from latlng

        try {
            Geocoder geo = new Geocoder(MainActivity.this.getApplicationContext(), Locale.getDefault());
            List<Address> addresses = geo.getFromLocation(touchLat,touchLong, 1);
            if (addresses.isEmpty()) {
                Toast.makeText(getApplicationContext(),"Waiting for Location",Toast.LENGTH_SHORT).show();
            }
            else {

                if (addresses.size() > 0) {
                    address =addresses.get(0).getFeatureName()
                            + ", " + addresses.get(0).getLocality()
                            + ", " + addresses.get(0).getAdminArea()
                            + ", " + addresses.get(0).getCountryName();
                    Toast.makeText(getApplicationContext(), "Address:- " +address, Toast.LENGTH_LONG).show();
                }

                // draws the marker at the currently touched location
                drawMarker(point,"Your Touched Position",address+"");

            }
        }
        catch (Exception e) {
            e.printStackTrace(); // getFromLocation() may sometimes fail
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM