web-dev-qa-db-fra.com

Calcul de la distance entre deux points de latitude et de longitude en android

Comment puis-je trouver la distance entre twolatitude & longitude points


Pour l'un des points de latitude et de longitude, je l'ai dans la base de données et un autre, je veux utiliser la position actuelle du mobile

Lequel devrais-je avoir besoin de les utiliser parmi ci-dessous::

  • Fournisseur de localisation Android
  • API Google
  • Calcul mathématique

note :: Tout exemple de code de démonstration sera utile

22
Devrath

Vous pouvez utiliser l'algorithme intégré:

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

mise à jour: (je n'ai aucune erreur avec cela)

LatLng latLngA = new LatLng(12.3456789,98.7654321);
LatLng latLngB = new LatLng(98.7654321,12.3456789);

Location locationA = new Location("point A");
locationA.setLatitude(latLngA.latitude);
locationA.setLongitude(latLngA.longitude);
Location locationB = new Location("point B");
locationB.setLatitude(latLngB.latitude);
locationB.setLongitude(latLngB.longitude);

double distance = locationA.distanceTo(locationB);
51
David

Vous pouvez utiliser l'algorithme Haversine. Un autre utilisateur a déjà codé une solution pour cela:

public double CalculationByDistance(double initialLat, double initialLong,
                            double finalLat, double finalLong){
int R = 6371; // km
double dLat = toRadians(finalLat-initialLat);
double dLon = toRadians(finalLong-initialLong);
lat1 = toRadians(lat1);
lat2 = toRadians(lat2);

double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
return R * c;
}

public double toRadians(deg) {
  return deg * (Math.PI/180)
}

Source: https://stackoverflow.com/a/17787472/3449528

11
Emilio