Search code examples
androidandroid-maps-v2android-maps

Why does Android location.distanceTo return values in Millions?


In my Android application I am trying to calculate the distance between two locations but the values I am getting is in tens of Millions 11Million+. The actual distance between the two point/location is just 1.1km - 1.3Km. Why is this so? Even if the value the .distanceTo method returns is in meters 11M meters is still a very big value.

Here is my code:

        Location locationA = new Location("LocationA");
        locationA.setLatitude(lat);
        locationA.setLongitude(lang);

        Location locationB = new Location("LocationB");
        locationB.setLatitude(14.575224);
        locationB.setLongitude(121.042475);

        float distance = locationA.distanceTo(locationB);
        BigDecimal _bdDistance;
        _bdDistance = round(distance,2);
        String _strDistance = _bdDistance.toString();      

Toast.makeText(this, "distance between two locations = "+_strDistance, Toast.LENGTH_SHORT).show();

  public static BigDecimal round(float d, int decimalPlace) {
        BigDecimal bd = new BigDecimal(Float.toString(d));
        bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
        return bd;
    }

Solution

  • Your approximation is right. It returns the distance in meters.

    You can convert it to KM by dividing it by 1000 like so;

    float distance = locationA.distanceTo(locationB)/1000;
    

    Read more about distanceTo here.