Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get map center point on scrolling Google maps v2 in android?

Hi iam doing an app very in my app there is a map page so i implemented Google Maps V2 and i have a issue i when i scroll the map i want to get the center points of the map that is if i scroll the map and i leave it then it gets the center points of the map so can any one can suggest to solve this issue it may be helpful Thank you in advance.......

Note : I have Used a Google Maps V2 so please post related to that .

public class Mapview extends FragmentActivity implements OnMapClickListener, OnCameraChangeListener{

final int RQS_GooglePlayServices = 1;
private GoogleMap myMap;
Location myLocation;
TextView tvLocInfo;
GPSTracker gps;
public double Latitude,Longitude;
String Datetime, addr,RegUID;
public String lat,longd;

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

    tvLocInfo = (TextView)findViewById(R.id.locinfo);

    FragmentManager myFragmentManager = getSupportFragmentManager();
    SupportMapFragment mySupportMapFragment = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);

    myMap = mySupportMapFragment.getMap();

    myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    myMap.setMyLocationEnabled(true);
    myMap.setOnMapClickListener(this);
    Projection P = myMap.getProjection();
    Log.e("lat", String.valueOf(Latitude));
    Log.e("lat", String.valueOf(Longitude));
    Button mDone = (Button) findViewById(R.id.button1);         
    mDone.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("SimpleDateFormat")
        public void onClick(View v) {

            //Toast.makeText(getBaseContext(), "latitude"+lat+""+"longitude"+longd , Toast.LENGTH_LONG).show();
            String timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());                
            Datetime = timeStamp.toString();
            Log.e("t", Datetime);               
            RegUID = Utils.RegisterUserId;
            Log.e("t", RegUID);
            final ProgressDialog dialog = ProgressDialog.show(Mapview.this, "", Utils.Loading, true);
            dialog.show();
            Handler handler = new Handler();
            handler.postDelayed(new Runnable(){
                @SuppressWarnings("unused")
                public void run()
                {
                    try
                    {
                        String EMPLOYEE_SERVICE_URI = Utils.Request+"UserID="+RegUID+"&Location="+URLEncoder.encode(addr,"UTF-8")+"&Latitude="+lat+"&Longitude="+longd+"&RequestDate="+URLEncoder.encode(Datetime,"UTF-8");
                        Log.e(EMPLOYEE_SERVICE_URI, EMPLOYEE_SERVICE_URI);
                        JSONObject JObject = Utils.getResult(EMPLOYEE_SERVICE_URI);
                        //Toast.makeText(Mapview.this,JObject.toString(), Toast.LENGTH_LONG).show();
                        if(JObject!=null)
                        {     

                            if(JObject.getBoolean("Valid"))
                            {

                                AlertDialog alertDialog = new AlertDialog.Builder(Mapview.this).create();
                                Utils.callAlert(JObject.getString("Message"), alertDialog);

                            }
                            else
                            {
                                AlertDialog alertDialog = new AlertDialog.Builder(Mapview.this).create();
                                Utils.callAlert(JObject.getString("Message"), alertDialog);
                            }

                        }
                        else
                        {
                            AlertDialog alertDialog = new AlertDialog.Builder(Mapview.this).create();
                            Utils.callAlert(JObject.getString("Message"), alertDialog);
                        }
                    }
                    catch (Exception e)
                    {
                        //Toast.makeText(Mapview.this,e.toString(), Toast.LENGTH_LONG).show();
                        Log.e("Exception", e.toString());
                    }
                    dialog.dismiss();
                }//run() ends  
            }, 5000);               


        }
    });


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());

    if (resultCode == ConnectionResult.SUCCESS){
        Toast.makeText(getApplicationContext(), 
                "isGooglePlayServicesAvailable SUCCESS", 
                Toast.LENGTH_LONG).show();
    }else{
        GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices);
    }

}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    Log.i("test","onScroll");
    return false;
}
@Override
public void onMapClick(LatLng point) {
    Log.e("lat", String.valueOf(point.latitude));
    Log.e("lat", String.valueOf(point.longitude));
    Latitude =point.latitude;
    Longitude = point.longitude;
    lat = String.valueOf(point.latitude);
    longd = String.valueOf(point.longitude);        
    myMap.moveCamera(CameraUpdateFactory.newLatLng(point));
    gps = new GPSTracker(Mapview.this);
    // check if GPS enabled     
    if(gps.canGetLocation())
    {   

        Geocoder geoCoder = new Geocoder(getBaseContext(), 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("\n");  
                }
                addr = new String(strReturnedAddress);
                tvLocInfo.setText(addr.toString());

                //Toast.makeText(getApplicationContext(), addr.toString(),Toast.LENGTH_LONG).show();
            }
            else
            {
                Toast.makeText(getApplicationContext(), "Gps location address is unavailable please try again later",
                        Toast.LENGTH_LONG).show();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block

            e.printStackTrace();
        }
    }
}

@Override
public void onCameraChange(CameraPosition arg0) {
    // TODO Auto-generated method stub

}

 }
like image 325
androidgeek Avatar asked Apr 06 '13 06:04

androidgeek


2 Answers

You can use:-

myMap.setOnCameraChangedListener(this);

And in the listener:-

onCameraChange(CameraPosition position) {
    LatLng target = position.target;
    // do what you need with the position here
}

I'm not sure about the index out of bounds. But to set a default map position you could use something like below:-

    private void setDefaultMapPosition(LatLng latLng) {

    CameraPosition camPos =
            new CameraPosition.Builder().target(latLng)
            .zoom(A_DEFAULT_MAP_ZOOM)
            .bearing(0)
            .tilt(0)
            .build();

    myMap.moveCamera(
            CameraUpdateFactory.newCameraPosition(camPos));

   }
like image 119
Ryan Avatar answered Nov 17 '22 15:11

Ryan


The interface OnCameraChangeListener has been deprecated. You can now use now OnCameraIdleListener

Called when camera movement has ended, there are no pending animations and the user has stopped interacting with the map.

and fetch the coordinates of the center by doing:

val centerCoordinates = mMap.cameraPosition.target
like image 2
Nicola Gallazzi Avatar answered Nov 17 '22 14:11

Nicola Gallazzi