2012-07-18 9 views
5

tengo 3 maneras de calcular la distancia y los 3 me da diferentes respuestas,la distancia entre dos puntos Android

double lat = 6.924049; 
    double lng = 79.853807; 

    double lat1 = 6.856461; 
    double lng1 = 79.912748; 

cómo calcular la distancia entre dos puntos y la forma de por ciento en Km? o Metros?

primera forma ans = 9.967441199417708E-6

float[] results = new float[1]; 
Location.distanceBetween(lat/1E6, lng/1E6, lat1/1E6, lng1/1E6,results); 
float s =results[0] * 0.000621371192f; 
String a2 = Float.toString(s); 

2ª manera ans = 6.1795527E6

double lat3 = lat/1E6; 
double lat2 = lat1/1E6; 
double lon3 = lng/1E6; 
double lon2 = lng1/1E6; 
double dLat = Math.toRadians(lat2 - lat3); 
double dLon = Math.toRadians(lon2 - lon3); 
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.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
// 6378.1 is gravity of earth 
double asd = c * 6378.1; 

3ª manera ans = 6,176576174444191

{ 
double a5 = distance(lat, lng, lat1, lng1); 
String a6 = Double.toString(a5); 
} 
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); 
    } 

    private double deg2rad(double deg) { 
     return (deg * Math.PI/180.0); 
    } 

    private double rad2deg(double rad) { 
     return (rad * 180.0/Math.PI); 
    } 

Entonces, ¿cómo calcular la distancia entre dos puntos y cómo ponerlo en porcentaje en KM? o Metros?

+0

Entonces, ¿qué tu pregunta ? – Lucifer

+0

¿Cómo calcular la distancia entre dos puntos y cómo calcular el porcentaje en Km? o Metros? – Loshi

Respuesta

10

http://developer.android.com/reference/android/location/Location.html

Use la distanceTo o distanceBetween métodos. ¿Por qué no intenta método de la ubicación del androide here

Puede crear un objeto de la ubicación de una latitud y longitud:

Location location = new Location(""); 
location.setLatitude(lat); 
location.setLongitude(lon); 
+1

Devuelve la distancia aproximada en metros entre esta ubicación y la ubicación especificada.La distancia se define usando el elipsoide WGS84. – Lucifer

0

No hay forma de encontrar un resultado preciso al calcular la distancia del lugar redondo enorme (tierra). Tendrás varios métodos para encontrar tales distancias. Ahora, a partir de su pregunta, me gustaría sugerirle que use el segundo o tercer método porque, desde mi punto de vista, su resultado es algo similar (posiblemente una distancia menor en pocos metros).

Para mi desarrollo personal, uso su tercer método. Y para mayor precisión, uso 6 dígitos después del punto decimal,

por ej. en el que caso, 6.176576174444191, yo uso 6,176576

+0

6.176576174444191 respuesta está en qué? metros? ¿Cómo puedo hacer que sea una figura pequeña? – Loshi

+0

usa el redondeo con formato decimal, 6 dígitos después del punto decimal. – Lucifer

+0

6.18 está en metros ¿no? – Loshi

0
double ER=3958.75; 
    double dlong=Math.toRadians(longitude1-longitude); 
           double dlat=Math.toRadians(latitude1-latitude); 
           a=(Math.sin(dlat/2)*Math.sin(dlat/2))+Math.cos(Math.toRadians(latitude))*Math.cos(Math.toRadians(latitude1))*Math.sin(dlong/2)*Math.sin(dlong/2);    
           c=2*Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
           d=ER*c; 

tratar con esto daré la distancia en kilómetros o cheque con esta link

1

Google Maps Android API Utility Library calcula la distancia y más sin problemas

Usted puede usarlo con Gradle


dependencies { 
    compile 'com.google.maps.android:android-maps-utils:0.5+' 
} 

double distance = SphericalUtil.computeDistanceBetween(pointA, pointB); 
Cuestiones relacionadas