Search code examples
androidgoogle-mapsandroid-serviceandroid-maps-v2android-gps

Getting Wrong distance from the built in method distanceTo


I am try to get distance from lat log but the blow method returns wrong distance what should I do?

@Override
   public void onLocationChanged(Location location) {
    currentLatitude2 = location.getLatitude();
    currentLongitude2 = location.getLongitude();
    Location locationA = new Location("point A");
    locationA.setLatitude(currentLatitude);
    locationA.setLongitude(currentLongitude);
    Location locationB = new Location("point B");
    locationB.setLatitude(currentLatitude2);
    locationB.setLongitude(currentLongitude2);
    float distance = locationA.distanceTo(locationB);
    Toast.makeText(this, distance + "", Toast.LENGTH_LONG).show();
}

Solution

  • Call this function to get latitude and longitude first time

      public void getlatlong() {
                Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    
                if (location == null) {
                    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (com.google.android.gms.location.LocationListener) this);
    
                } else {
    
                    //If everything went fine lets get latitude and longitude
                    currentLatitude = location.getLatitude();
                    currentLongitude = location.getLongitude();
                    Toast.makeText(this, currentLatitude + " WORKS " + currentLongitude + "", Toast.LENGTH_LONG).show();
                }
            }
    
            //call this function to get latitude and longitude 2nd time and this will also return you the distance 
            // Note* to check the distance you should at least cover the distance 1 or half km
    
             public void getlatlong2() {
                Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    
                if (location == null) {
                    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (com.google.android.gms.location.LocationListener) this);
    
                } else {
    
                    currentLatitude2 = location.getLatitude();
                    currentLongitude2 = location.getLongitude();
                    Location locationA = new Location("point A");
                    locationA.setLatitude(currentLatitude);
                    locationA.setLongitude(currentLongitude);
    
                    Location locationB = new Location("point B");
                    locationB.setLatitude(currentLatitude2);
                    locationB.setLongitude(currentLongitude2);
                    float distance = locationA.distanceTo(locationB)/1000;
                   // float a = (float) (distance * 0.000621371);
                    Toast.makeText(this, distance + "", Toast.LENGTH_LONG).show();
                    dist.setText(distance + "");
                }
            }