cómo obtener la distancia entre dos lugares en kilómetros en google map v2 usando LatLng

En mi aplicación de Android, debo calcular la distancia entre la ubicación actual del usuario y el punto que el usuario toca en el mapa. Estoy usando esta función para calcular:

     public double CalculationByDistance(LatLng StartP, LatLng EndP) {
     int Radius=6371;//radius of earth in Km         
     double lat1 = StartP.latitude;
     double lat2 = EndP.latitude;
     double lon1 = StartP.longitude;
     double lon2 = EndP.longitude;
     double dLat = Math.toRadians(lat2-lat1);
     double dLon = Math.toRadians(lon2-lon1);
     double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
    Math.sin(dLon/2) * Math.sin(dLon/2);
    double c = 2 * Math.asin(Math.sqrt(a));
    double valueResult= Radius*c;
    double km=valueResult/1;
    DecimalFormat newFormat = new DecimalFormat("####");
    int kmInDec =  Integer.valueOf(newFormat.format(km));
    double meter=valueResult%1000;
    int  meterInDec= Integer.valueOf(newFormat.format(meter));
    Log.i("Radius Value",""+valueResult+"   KM  "+kmInDec+" Meter   "+meterInDec);

    return Radius * c;
    }

Pero estoy obteniendo una distancia muy larga como resultado, por ejemplo. Obtengo como 10947 km como la distancia entre dos lugares, que es solo de unos 20 m. ¿Alguien puede ayudarme?

preguntado el 12 de febrero de 14 a las 05:02

4 Respuestas

Android ofrece un método para calcular la distancia entre dos puntos de latitud y longitud.

android.location.Location.distanceBetween(double startLatitude,
    double startLongitude, double endLatitude, double endLongitude, float[] results)

Respondido 12 Feb 14, 05:02

Buscar sobre Ecuación Haversine. aquí hay una implementación que devuelve la distancia en Metro:

public static double haversine(double lat1, double lon1, double lat2, double lon2) {
    double dLat = Math.toRadians(lat2 - lat1);
    double dLon = Math.toRadians(lon2 - lon1);
    lat1 = Math.toRadians(lat1);
    lat2 = Math.toRadians(lat2);

    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

    return R * c;
}

Donde R = 6371000;

Respondido 12 Feb 14, 05:02

Utilice este método:

        private double distance(double lat1, double lon1, double lat2,
            double lon2) {
        double theta = lon1 - lon2;
        double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
                + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
                * Math.cos(deg2rad(theta));
        dist = Math.acos(dist);
        dist = rad2deg(dist);
        dist = dist * 60 * 1.1515;
        return (dist);
    }

O simplemente revisa esto conversación

contestado el 23 de mayo de 17 a las 13:05

¿Puedes proporcionar el método deg2rad? - PascuaKim

Método para calcular la distancia en Kilómetros

public static double distanceKM(double lat1, double lon1, double lat2,
            double lon2) {
        int EARTH_RADIUS_KM = 6371;
        double lat1Rad = Math.toRadians(lat1);
        double lat2Rad = Math.toRadians(lat2);
        double deltaLonRad = Math.toRadians(lon2 - lon1);

        double dist_travelled = Math
                .acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad)
                        * Math.cos(lat2Rad) * Math.cos(deltaLonRad))
                * EARTH_RADIUS_KM;

        dist_travelled = Double.parseDouble(new DecimalFormat("##.######")
                .format(dist_travelled));
        return dist_travelled;

    }

Respondido 12 Feb 14, 06:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.