Search code examples
androidgoogle-mapslocationmanager

Android: Map Controler's animateTo method doesn't work properly


I'm trying to animate a new location on the map when the location changed (or when I supply a mock location via the telnet)

this is what I use

Toast.makeText(getApplicationContext(), "New Lontitue = "+ lontitue +"\n New Latitute = "+ latitute, Toast.LENGTH_LONG).show();

GeoPoint geopoint = new GeoPoint(latitute, lontitue);
mapController.animateTo(geopoint);

Though the Toast shows the lontitute and latitute properly, app doesn't animate to given cordinates. What could be the problem?? Please find my whole code below.

package com.mayuonline.androidgps;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class GPSActivity extends MapActivity  {
    MapController mapController; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // setting up map
        MapView mapview = (MapView)findViewById(R.id.mapview);
        mapview.setBuiltInZoomControls(true);

        mapController = mapview.getController();
       // mapController.setZoom(16);

        LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

        LocationListener locationListener = new LocationListener() {

            @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

            }

            @Override
            public void onLocationChanged(Location location) {
                makeUseOfNewLocation(location);
                //Toast.makeText(getApplicationContext(), "New Locationdd", Toast.LENGTH_LONG).show();              
            }

            private void makeUseOfNewLocation(Location location) {

                double lon = (double)location.getLongitude();
                double lat = (double)location.getLatitude();

                int lontitue = (int)lon;
                int latitute = (int)lat;

                Toast.makeText(getApplicationContext(), "New Lontitue = "+ lontitue +"\n New Latitute = "+ latitute, Toast.LENGTH_LONG).show();

                GeoPoint geopoint = new GeoPoint(latitute, lontitue);
                mapController.animateTo(geopoint);
            }
        };

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);
    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}

Solution

  • I figured out the issue. It is something to do with getLongitude method :)

    I need to multiply by 1E6 as given below.

    double lon = (double) (location.getLongitude() * 1E6);
    double lat = (double) (location.getLatitude() * 1E6);
    
    int lontitue = (int)lon;
    int latitute = (int)lat;
    
    Toast.makeText(getApplicationContext(), "New Lontitue = "+ lontitue +"\n New Latitute = "+ latitute, Toast.LENGTH_LONG).show();
    
    GeoPoint geopoint = new GeoPoint(latitute, lontitue);
    mapController.animateTo(geopoint);