How to get screen center location of google map?

22,742

Solution 1

protected void userLocationMap() {

        mapFragment = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map));
        googleMap = mapFragment.getMap();
        int status = GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(getBaseContext());

        if (status != ConnectionResult.SUCCESS) { 
///if play services are not available
            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this,
                    requestCode);
            dialog.show();

        } else {

            // Enabling MyLocation Layer of Google Map
            googleMap.setMyLocationEnabled(true);

            // Creating a LatLng object for the current location
            LatLng latLng = new LatLng(latitude, longitude);
            // Showing the current location in Google Map
            googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
            // Zoom in the Google Map
            googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
            Log.i("latitude", "==========" + latitude);
////locationTextView holds the address string
            locationTextView.setText(getCompleteAdressString(latitude, longitude));

            // create marker
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(latitude, longitude)).title("My Location");
            // adding marker
            googleMap.addMarker(marker);
        }
    }

and the getcompleteAdress method is:::::==>

private String getCompleteAddressString(double LATITUDE, double LONGITUDE) {

        String strAdd = "";

        Geocoder geocoder = new Geocoder(this, Locale.getDefault());
        try {
            List<Address> addresses = geocoder.getFromLocation(LATITUDE,
                    LONGITUDE, 1);

            if (addresses != null) {

                Address returnedAddress = addresses.get(0);

                StringBuilder strReturnedAddress = new StringBuilder("");

                for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {

                    strReturnedAddress
                            .append(returnedAddress.getAddressLine(i)).append(
                                    ",");
                }

                strAdd = strReturnedAddress.toString();

                Log.w("My Current loction address",
                        "" + strReturnedAddress.toString());
            } else {
                Log.w("My Current loction address", "No Address returned!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.w("My Current loction address", "Canont get Address!");
        }
        return strAdd;
    }

To change location as per clicks on====>

 googleMap.setOnMapClickListener(new OnMapClickListener() {

            @Override
            public void onMapClick(LatLng point) {
                Log.d("Map","Map clicked");
                marker.remove();
                double latitude = latLng.latitude;
                double longitude = latLng.longitude;
locationTextView.setText(getCompleteAdressString(latitude,longitude ));
                drawMarker(point);
            }
        });

Solution 2

You can get center point of map at any time by calling this function on your GoogleMap variable instance

mMap.getCameraPosition().target 

Now if you want to get center point everytime map is changed then you need to implement OnCameraChangeListener listener and call the above line to get new center point.

Update: OnCameraChangeListener has been replaced with OnCameraMoveStartedListener, OnCameraMoveListener and OnCameraIdleListener listeners. Use the one that suits your use case.

Solution 3

This will provide center screen lat and lang

LatLng centerLatLang = 
mMap.getProjection().getVisibleRegion().latLngBounds.getCenter();

Solution 4

I've managed to create the map for my current location. But it gives coordinates of my location only once and I need to get location while moving to some other location. posting my code

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnCameraChangeListener;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.maps.GeoPoint;

import android.app.ActionBar;
import android.app.Activity;
import android.app.Dialog;
import android.graphics.Canvas;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


public class MapLocation extends FragmentActivity implements LocationListener {

    GoogleMap googleMap;
    MarkerOptions markerOptions;
    LatLng latLng;

    ImageView icon;
    TextView selected;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        icon = (ImageView)findViewById(R.id.icon_baby);
        icon.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();

            }
        });


     // Getting Google Play availability status
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

        // Showing status
        if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
            dialog.show();

        }else { // Google Play Services are available

            // Getting reference to the SupportMapFragment of activity_main.xml
            SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

            // Getting GoogleMap object from the fragment
            googleMap = fm.getMap();

            // Enabling MyLocation Layer of Google Map
            googleMap.setMyLocationEnabled(true);

            // Getting LocationManager object from System Service LOCATION_SERVICE
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            String provider = locationManager.getBestProvider(criteria, true);

            // Getting Current Location
            Location location = locationManager.getLastKnownLocation(provider);

            if(location!=null){
                onLocationChanged(location);
            }
            locationManager.requestLocationUpdates(provider, 20000, 0, this);
        }
    }
    //@Override
    public void onLocationChanged(Location location) {

        TextView tvLocation = (TextView) findViewById(R.id.selected_location);

        // Getting latitude of the current location
        double latitude = location.getLatitude();

        // Getting longitude of the current location
        double longitude = location.getLongitude();

        // Creating a LatLng object for the current location
        LatLng latLng = new LatLng(latitude, longitude);

        // Showing the current location in Google Map
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

        // Zoom in the Google Map
        googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));

        // Setting latitude and longitude in the TextView tv_location
        tvLocation.setText("Latitude:" +  latitude  + ", Longitude:"+ longitude );
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }
    }
Share:
22,742
MANCHAI
Author by

MANCHAI

Updated on July 28, 2020

Comments

  • MANCHAI
    MANCHAI almost 4 years

    I want to create a map with static marker to always show the location of center of screen. I've created a marker in layout with drawable image in the center. Now I need to get the center location coordinates and convert them to address. afterwards show the selected location in a text view as my selected location. Need help

  • MANCHAI
    MANCHAI almost 9 years
    can you please provide some example or so?
  • Ansal Ali
    Ansal Ali almost 9 years
    If you are not satified with our answers, please let us know
  • Ansal Ali
    Ansal Ali almost 9 years
    I have edited my answer to include your question in the comments. But question is not so clear.. If you are not satisfied please let us know
  • Mattia Ruggiero
    Mattia Ruggiero over 7 years
    It works really well, and the code it's also cleaner than the accepted answer
  • mehmet
    mehmet over 6 years
    @MANCHAI Such as: double CameraLat = mMap.getCameraPosition().target.latitude; double CameraLong = mMap.getCameraPosition().target.longitude;
  • M'aiq the Coder
    M'aiq the Coder about 4 years
    Yep, this should be the accepted answer. If one guy gives an answer in 30 lines of code and another guy gives an answer in just one line of code (that has no visible implementation downsides), the one liner should always be the accepted answer.