Calcula la distancia en metros cuando sabes la longitud y la latitud en java

Posible duplicado:
Trabajando con valores de latitud / longitud en Java

Duplicar:

  • Trabajando con valores de latitud / longitud en Java
  • ¿Cómo calculo la distancia entre dos puntos de latitud y longitud?

Necesito calcular la distancia entre dos puntos dados por dos coordenadas. El proyecto en el que estoy trabajando es un proyecto Java, por lo que el código Java será genial, pero también se puede dar un pseudocódigo, y luego puedo implementarlo yo mismo 🙂

Como probablemente sepa, hay tres formas de representar coordenadas:

  • Grados: Minutos: Segundos (49 ° 30’00 “N, 123 ° 30’00” W)
  • Grados: minutos decimales (49 ° 30.0 ‘, -123 ° 30.0’), (49d30.0m, -123d30.0 ‘)
  • Grados decimales (49.5000 °, -123.5000 °), generalmente con 4-6 números decimales.

Es la tercera forma en que se entregan mis coordenadas, por lo que se preferirá el código para estos valores 🙂

Basado en otra pregunta sobre stackoverflow , obtuve este código … Esto calcula el resultado en metros, no en millas 🙂

public static float distFrom(float lat1, float lng1, float lat2, float lng2) { double earthRadius = 6371000; //meters double dLat = Math.toRadians(lat2-lat1); double dLng = Math.toRadians(lng2-lng1); double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); float dist = (float) (earthRadius * c); return dist; } 

Puede usar la Biblioteca de Geodesia de Java para GPS , utiliza las fórmulas de Vincenty que tiene en cuenta la curvatura de la superficie de la tierra.

La implementación es así:

 import org.gavaghan.geodesy.*; ... GeodeticCalculator geoCalc = new GeodeticCalculator(); Ellipsoid reference = Ellipsoid.WGS84; GlobalPosition pointA = new GlobalPosition(latitude, longitude, 0.0); // Point A GlobalPosition userPos = new GlobalPosition(userLat, userLon, 0.0); // Point B double distance = geoCalc.calculateGeodeticCurve(reference, userPos, pointA).getEllipsoidalDistance(); // Distance between Point A and Point B 

La distancia resultante está en metros.

En C ++ se hace así:

 #define LOCAL_PI 3.1415926535897932385 double ToRadians(double degrees) { double radians = degrees * LOCAL_PI / 180; return radians; } double DirectDistance(double lat1, double lng1, double lat2, double lng2) { double earthRadius = 3958.75; double dLat = ToRadians(lat2-lat1); double dLng = ToRadians(lng2-lng1); double a = sin(dLat/2) * sin(dLat/2) + cos(ToRadians(lat1)) * cos(ToRadians(lat2)) * sin(dLng/2) * sin(dLng/2); double c = 2 * atan2(sqrt(a), sqrt(1-a)); double dist = earthRadius * c; double meterConversion = 1609.00; return dist * meterConversion; } 
    Intereting Posts