Calculez la distance en mètres lorsque vous connaissez la longitude et la latitude en Java

Duplication possible:
Travailler avec les valeurs de latitude / longitude en Java

Dupliquer:

  • Travailler avec les valeurs de latitude / longitude en Java
  • Comment calculer la distance entre deux points de longitude de latitude?

J’ai besoin de calculer la distance entre deux points donnés par deux coordonnées. Le projet sur lequel je travaille est un projet Java, donc le code Java sera génial, mais le pseudo-code peut aussi être donné, alors je peux l’implémenter moi-même 🙂

Comme vous le savez probablement, il existe trois manières de représenter les coordonnées:

  • Degrés: minutes: secondes (49 ° 30’00 “N, 123 ° 30’00” W)
  • Degrés: Minutes décimales (49 ° 30.0 ‘, -123 ° 30.0’), (49d30.0m, -123d30.0 ‘)
  • Degrés décimaux (49,5000 °, -123,5000 °), généralement avec 4 à 6 nombres décimaux.

C’est la troisième façon dont mes coordonnées sont données, donc le code pour ces valeurs sera préféré 🙂

Basé sur une autre question sur stackoverflow , j’ai obtenu ce code .. Cela calcule le résultat en mètres, pas en miles 🙂

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

Vous pouvez utiliser la bibliothèque de géodésie Java pour GPS , elle utilise les formules de Vincenty qui tiennent compte de la courbure de la surface de la Terre.

La mise en œuvre se déroule comme suit:

 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 distance résultante est en mètres.

En C ++ c’est comme ça:

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