web-dev-qa-db-fra.com

Comment puis-je calculer la distance entre deux points gps en Java?

J'ai utilisé ce code mais cela ne fonctionne pas:

Besoin de la distance entre deux coordonnées GPS comme 41.1212, 11.2323 en kilomètres (Java)

double d2r = (180 / Math.PI);
double distance = 0;

try{
    double dlong = (endpoint.getLon() - startpoint.getLon()) * d2r;
    double dlat = (endpoint.getLat() - startpoint.getLat()) * d2r;
    double a =
        Math.pow(Math.sin(dlat / 2.0), 2)
            + Math.cos(startpoint.getLat() * d2r)
            * Math.cos(endpoint.getLat() * 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;

} catch(Exception e){
    e.printStackTrace();
}
23
Benni

La longitude et la latitude sont données en degrés (0-360). Si vous souhaitez convertir des degrés en radians (0-2π), vous devez diviser par 360 et multiplier par 2π (ou de manière équivalente, multipliez par π/180 ). Dans votre code cependant, vous multipliez par 180/π .

C'est le changement

double d2r = (180 / Math.PI);

dans

double d2r = Math.PI / 180;
21
aioobe

voir un Geocalc

Coordinate lat = new GPSCoordinate(41, .1212);
Coordinate lng = new GPSCoordinate(11, .2323);
Point point = new Point(lat, lng);

lat = new DegreeCoordinate(51.4613418);
lng = new DegreeCoordinate(-0.3035466);
Point point2 = new Point(lat, lng);
System.out.println("Distance is " + EarthCalc.getDistance(point2, point) / 1000 + " km");

La distance est 1448.7325760822912 km

J'ai écrit cette bibliothèque pour l'un de mes projets.

9
Romain

La solution de http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter .

Ne fonctionne que si les points sont suffisamment proches pour que vous puissiez omettre que la terre n’est pas de forme régulière.

 
 privé double gps2m (float lat_a, float lng_a, float lat_b, float lng_b) {
 float pk = (float) (180/3.14169); 
 
 float a1 = lat_a/pk; 
 float a2 = lng_a/pk; 
 float b1 = lat_b/pk; 
 float b2 = lng_b/pk; 
 
 float t1 = FloatMath.cos (a1) * FloatMath.cos (a2) * FloatMath.cos (b1) * FloatMath.cos (b2); 
 float t2 = FloatMath.cos ( a1) * FloatMath.sin (a2) * FloatMath.cos (b1) * FloatMath.sin (b2); 
 float t3 = FloatMath.sin (a1) * FloatMath.sin (b1); 
 double tt = Math.acos (t1 + t2 + t3); 
 
 retourner 6366000 * tt; 
} 
 // 
 

voir Distance entre deux coordonnées GPS en mètre .

8
sherif

La distance entre deux points (et bien d’autres choses utiles) est disponible à l’adresse: http://www.movable-type.co.uk/scripts/latlong.html

2
peSHIr
1
M.Hefny

La distance peut être calculée avec la bibliothèque de géométrie Esri: geodesicDistanceOnWGS84 .

Je suppose que JTS dispose également d’une méthode de calcul de la distance.

0
Randall Whitman