Cálculo de distancia entre dos ubicaciones geográficas

por favor, arroja algo de luz sobre esta situación

En este momento tengo dos arreglos que tienen latitud y longitud de lugares cercanos y también tengo la ubicación del usuario latiude y longiude ahora quiero calcular la distancia entre la ubicación del usuario y los lugares cercanos y quiero mostrarlos en la vista de lista.

Sé que hay un método para calcular la distancia como

public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results); 

Ahora, ¿cuál es el problema? ¿Cómo pasar estas dos matrices con latitud y longitud cercana en este método y obtener el conjunto de distancias?

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

Mire en distanceTo o distanceBetween. Puede crear un objeto de ubicación desde una latitud y longitud:

 Location locationA = new Location("point A"); locationA.setLatitude(latA); locationA.setLongitude(lngA); Location locationB = new Location("point B"); locationB.setLatitude(latB); locationB.setLongitude(lngB); float distance = locationA.distanceTo(locationB); 

o

 private double meterDistanceBetweenPoints(float lat_a, float lng_a, float lat_b, float lng_b) { float pk = (float) (180.f/Math.PI); float a1 = lat_a / pk; float a2 = lng_a / pk; float b1 = lat_b / pk; float b2 = lng_b / pk; double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2); double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2); double t3 = Math.sin(a1) * Math.sin(b1); double tt = Math.acos(t1 + t2 + t3); return 6366000 * tt; } 

Prueba este código aquí tenemos dos valores de longitud y latitud y la función selected_location.distanceTo (near_locations) devuelve la distancia entre esos lugares en metros.

 Location selected_location=new Location("locationA"); selected_location.setLatitude(17.372102); selected_location.setLongitude(78.484196); Location near_locations=new Location("locationB"); near_locations.setLatitude(17.375775); near_locations.setLongitude(78.469218); double distance=selected_location.distanceTo(near_locations); 

aquí “distancia” es la distancia entre la ubicación A y la ubicación B (en metros)

Solo hay una ubicación de usuario, por lo que puede iterar La lista de lugares cercanos puede llamar a la función distanceTo() para obtener la distancia, puede almacenar en una matriz si lo desea.

Por lo que entiendo, distanceBetween() es para lugares lejanos, su salida es un elipsoide WGS84.

  private static Double _MilesToKilometers = 1.609344; private static Double _MilesToNautical = 0.8684; ///  /// Calculates the distance between two points of latitude and longitude. /// Great Link - http://www.movable-type.co.uk/scripts/latlong.html ///  /// First coordinate. /// Second coordinate. /// Sets the return value unit of length. public static Double Distance(Coordinate coordinate1, Coordinate coordinate2, UnitsOfLength unitsOfLength) { double theta = coordinate1.getLongitude() - coordinate2.getLongitude(); double distance = Math.sin(ToRadian(coordinate1.getLatitude())) * Math.sin(ToRadian(coordinate2.getLatitude())) + Math.cos(ToRadian(coordinate1.getLatitude())) * Math.cos(ToRadian(coordinate2.getLatitude())) * Math.cos(ToRadian(theta)); distance = Math.acos(distance); distance = ToDegree(distance); distance = distance * 60 * 1.1515; if (unitsOfLength == UnitsOfLength.Kilometer) distance = distance * _MilesToKilometers; else if (unitsOfLength == UnitsOfLength.NauticalMiles) distance = distance * _MilesToNautical; return (distance); } 

distanceTo te dará la distancia en metros entre las dos ubicaciones dadas ej target.distanceTo (destination).

distanceBeween también le da la distancia pero almacenará la distancia en una matriz de float (resultados [0]). el documento dice: Si los resultados tienen una longitud 2 o superior, la marca inicial se almacena en los resultados [1]. Si los resultados tienen una longitud de 3 o mayor, el rumbo final se almacena en los resultados [2]

Espero que esto ayude

He utilizado distanceTo para obtener la distancia del punto A al B, creo que ese es el camino a seguir.

 public double distance(Double latitude, Double longitude, double e, double f) { double d2r = Math.PI / 180; double dlong = (longitude - f) * d2r; double dlat = (latitude - e) * d2r; double a = Math.pow(Math.sin(dlat / 2.0), 2) + Math.cos(e * d2r) * Math.cos(latitude * d2r) * Math.pow(Math.sin(dlong / 2.0), 2) double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double d = 6367 * c; return d; }