puntos online longitud latitud geograficas geodesica entre distancias distancia coordenadas con como calculo calcular java distance latitude-longitude

online - como calcular la distancia en java



Calcula la distancia en metros cuando sabes la longitud y la latitud en java (3)

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

Duplicar:

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 , 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; }


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; }


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.