cómo obtener la distancia entre dos lugares en kilómetros en google map v2 usando LatLng
Frecuentes
Visto 3,777 equipos
3
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?
4 Respuestas
4
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
1
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
0
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
0
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 android google-maps or haz tu propia pregunta.
¿Puedes proporcionar el método deg2rad? - PascuaKim
ver este enlace stackoverflow.com/questions/6981916/… ... - Ranjit